Pregunta

A lo largo de las líneas de mi anterior pregunta, ¿cómo puedo unirme a una lista de cadenas de caracteres en una cadena tal que los valores de la citada limpiamente.Algo así como:

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

en:

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

Sospecho que el módulo csv va a venir a jugar aquí, pero no estoy seguro de cómo obtener el resultado que quiero.

¿Fue útil?

Solución

El uso de la csv módulo se puede hacer de esa manera:

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

Si usted necesita una cadena solo uso StringIO instancia como un archivo:

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

El resultado: a,"one ""two"" three","foo, bar","both""'"

csv se escribe de una manera que se puede leer de nuevo más tarde.Puede afinar su salida mediante la definición de un dialect, establecido 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()

El resultado: a,one \"two\" three,"foo, bar",both\"'

El mismo dialecto puede ser utilizado con csv módulo para leer la cadena de nuevo más tarde a una lista.

Otros consejos

En una nota relacionada, el de Python builtin codificadores también se puede hacer de la cadena de escapar:

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

Aquí es un poco más simple alternativa.

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

Sólo necesitamos cotización de un valor que podría tener comas o cotizaciones.

>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\'']
>>> print ", ".join( map(quote,x) )
a, 'one "two" three', 'foo, bar', 'both"\''
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top