el escritor csv ignora ciertos valores

Digamos que quiero que el escritor python csv incorporado ignore ciertos valores de cadena en la matriz (no coloque ningún valor entre comas en la salida). Por ejemplo,

my_list = [4, 'foo', 'close', 9, 0]

csv output => 4, ,'close', 9, 0

Proporcionaría un parámetro 'foo' que designaría para ser ignorado por el escritor, ¿es esto posible? Si es así, ¿alguien podría ayudar en la implementación?

preguntado el 30 de julio de 12 a las 13:07

¿Podría arreglar su salida? Hay una comilla perdida y no estoy seguro si quieres ', ' or ',' como delimitador -

¿Realmente quieres la representación de la cadena ('close') en lugar de solo close? -

4 Respuestas

Podría hacer algo como esto, si tiene una lista 2D de filas para escribir:

lines = [[4, 'foo', 'close', 9, 0], [5, 'foo', 'close', 9, 0]]

import csv
with open("outfile.csv", "wb") as outf:
    w = csv.writer(outf)
    for line in lines:
        w.writerow(["" if e == "foo" else e for e in line])

Respondido 30 Jul 12, 13:07

Tenga en cuenta que esto no funciona en python 3. Genera el error: TypeError: 'str' does not support the buffer interface - Jamylak

>>> import csv
>>> my_list = [4, 'foo', 'close', 9, 0]
>>> with open('test.csv', 'w') as fout:
        w = csv.writer(fout, delimiter=',')
        w.writerow([x if x != 'foo' else ' ' for x in my_list])

>>> print open('test.csv').read()
4, ,close,9,0

Respondido 30 Jul 12, 13:07

Podría usar algo como esto para hacer reemplazos dentro de la lista:

map(lambda x : str(x) if x != 'foo' else ' ', my_list)

y solo haz un join para crear la cadena de salida:

','.join(map(lambda x : str(x) if x != 'foo' else ' ', my_list))

Respondido 30 Jul 12, 13:07

Tenga en cuenta que las listas de comprensión generalmente se consideran mejor estilo que map lambda - Jamylak

Puedes intentar esto:

ignored_strings = {'foo', 'ignored2', 'ignored3'}

my_list_filtered = [value if value not in ignored_strings else '' for value in my_list]

Eso reemplaza cada valor que desea ignorar por una cadena vacía. Luego puede usar el escritor csv para imprimir la nueva lista.

También puede simplemente eliminar los valores que no desea de una lista usando una declaración 'si' al final de la comprensión de la lista, según cómo desee que se vea su resultado.

Respondido 30 Jul 12, 14:07

Si vas a utilizar este método, ignored_strings debería ser un conjunto - mgilson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.