Frage

Nach dem Vorbild meines früheren Frage , wie kann ich eine Liste von Strings in einen String so verbinden, dass die Werte sauber zitiert bekommen. So etwas wie:

['a', 'one "two" three', 'foo, bar', """both"'"""]

in:

a, 'one "two" three', "foo, bar", "both\"'"

Ich vermute, dass der csv-Modul hier ins Spiel kommen, aber ich bin nicht sicher, wie die Ausgabe zu bekommen was ich will.

War es hilfreich?

Lösung

das csv Modul verwenden, können Sie auf diese Weise tun:

import csv
writer = csv.writer(open("some.csv", "wb"))
writer.writerow(the_list)

Wenn Sie eine Zeichenfolge müssen nur verwenden StringIO Instanz als Datei:

f = StringIO.StringIO()
writer = csv.writer(f)
writer.writerow(the_list)
print f.getvalue()

Der Ausgang: a,"one ""two"" three","foo, bar","both""'"

csv wird in einer Art und Weise schreiben Sie es später zurücklesen kann. Sie können seine Ausgabe Feinabstimmung durch eine dialect definieren, gerade gesetzt quotechar, escapechar, etc., je nach Bedarf:

class SomeDialect(csv.excel):
    delimiter = ','
    quotechar = '"'
    escapechar = "\\"
    doublequote = False
    lineterminator = '\n'
    quoting = csv.QUOTE_MINIMAL

f = cStringIO.StringIO()
writer = csv.writer(f, dialect=SomeDialect)
writer.writerow(the_list)
print f.getvalue()

Der Ausgang: a,one \"two\" three,"foo, bar",both\"'

Der gleiche Dialekt kann mit csv-Modul verwendet werden, um die Zeichenfolge später wieder auf eine Liste zu lesen.

Andere Tipps

Auf einem verwandten beachten, Python gebautet Encoder auch String tun kann entkommen :

>>> print "that's interesting".encode('string_escape')
that\'s interesting

Hier ist eine etwas einfachere Alternative.

def quote(s):
    if "'" in s or '"' in s or "," in str(s):
        return repr(s)
    return s

Wir brauchen nur einen Wert zu zitieren, die Kommas oder Anführungszeichen haben könnte.

>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\'']
>>> print ", ".join( map(quote,x) )
a, 'one "two" three', 'foo, bar', 'both"\''
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top