vacia lista crear comando python string list csv

lista - comando range python



¿Cómo puedo unirme a una lista en una cadena(advertencia)? (3)

En la línea de mi pregunta anterior, ¿cómo puedo unirme a una lista de cadenas en una cadena para que los valores sean citados limpiamente? Algo como:

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

dentro:

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

Sospecho que el módulo csv entrará en juego aquí, pero no estoy seguro de cómo obtener la salida que quiero.


Aquí hay una alternativa un poco más simple.

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

Solo necesitamos citar un valor que pueda tener comas o comillas.

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


En una nota relacionada, los codificadores incorporados de Python también pueden hacer cadenas de escape:

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


Usando el módulo csv puedes hacer eso:

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

Si necesita una cadena simplemente use la instancia de StringIO como un archivo:

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

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

csv escribirá de una manera que pueda leer más tarde. Puede ajustar su salida definiendo un dialect , simplemente establezca quotechar , escapechar , etc., según sea necesario:

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 salida: a,one /"two/" three,"foo, bar",both/"''

El mismo dialecto se puede usar con el módulo csv para leer la cadena más tarde en una lista.