Question

Suivant les lignes de mon précédent question , comment puis-je joindre une liste de chaînes dans une chaîne de telle sorte que les valeurs soient correctement citées? Quelque chose comme:

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

dans:

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

Je pense que le module csv entrera en jeu ici, mais je ne sais pas comment obtenir le résultat souhaité.

Était-ce utile?

La solution

En utilisant le module csv , vous pouvez le faire de la manière suivante:

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

Si vous avez besoin d'une chaîne, utilisez simplement l'instance StringIO en tant que fichier:

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

La sortie: a, "un" et "deux". trois "," foo, bar "," les deux "" ""

csv écrira de manière à pouvoir être lu ultérieurement. Vous pouvez ajuster sa sortie en définissant un dialecte , définissez simplement quotechar , escapechar , etc., si nécessaire:

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()

La sortie: a, un \ " deux \ " trois, "foo, bar", les deux "" /

Le même dialecte peut être utilisé avec le module csv pour lire la chaîne ultérieurement dans une liste.

scroll top