python lists Comment puis-je joindre une liste dans une chaîne(mise en garde)?




python list of list to csv (3)

En utilisant le module csv vous pouvez faire comme ça:

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

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

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

La sortie: a,"one ""two"" three","foo, bar","both""'"

csv écrira d'une manière qu'il pourra relire plus tard. Vous pouvez affiner sa sortie en définissant un dialect , il suffit de définir quotechar , escapechar , etc, selon les besoins:

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,one \"two\" three,"foo, bar",both\"'

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

Dans le sens de ma question précédente, comment puis-je joindre une liste de chaînes dans une chaîne de 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 soupçonne que le module csv entrera en jeu ici, mais je ne suis pas sûr de savoir comment obtenir la sortie que je veux.


Voici une alternative légèrement plus simple.

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

Nous avons seulement besoin de citer une valeur qui pourrait avoir des virgules ou des citations.

>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\'']
>>> print ", ".join( map(quote,x) )
a, 'one "two" three', 'foo, bar', 'both"\''

Sur une note connexe, les encodeurs intégrés de Python peuvent également faire une chaîne d'échappement:

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






csv