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.