Así que tengo un problema interesante que me está frenando. Tengo una lista masiva que contiene alrededor de 150 listas de longitud 28. Cada una de estas pequeñas listas se parece a esto:

['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', '']

Vale la pena señalar que cada uno de esos elementos es una cadena que contiene desde \ n caracteres, nada en absoluto, comas, etc. Los primeros dos elementos en cada lista son algo así como A 1, A 2, B 1, etc. Mi delimitador para archivos csv es el | personaje. El problema que tengo es que cuando intento volver a escribir estos datos en un archivo csv, solo puedo colocar la lista completa como una cadena en la primera columna de cada fila (lo que significa que se ve exactamente como han incluido más arriba) o coloque cada elemento en su propia fila.

Idealmente, lo que necesito lograr es que cada lista pequeña dentro de la lista grande esté en su propia fila, con cada elemento en la lista pequeña en su propia celda en esa fila. Entonces cada fila utilizaría las columnas A-AB para una lista. El código que he probado se parece a:

with open("testFile.csv", "w") as csvfile:
    writer = csv.writer(csvfile, delimiter='|')
    for row in listOfRows: # Uses nested loops to access each item within
        for i in row:      # the small lists.
            writer.writerow([i])

He intentado una variación de esto que escribe todo el elemento de la lista pequeña pero que termina colocando cada lista pequeña en una celda en la primera columna. ¿Alguien tiene alguna idea sobre cómo hacer esto?

0
Mike Sassatelli 16 oct. 2018 a las 22:59

2 respuestas

La mejor respuesta

Debería poder utilizar { {X0}} función de la clase csvwriter para hacer todo esto a la vez sin un bucle.

with open("testFile.csv", "w") as csvfile:
    writer = csv.writer(csvfile, delimiter='|')
    writer.writerows(listOfRows)
1
Marcus 16 oct. 2018 a las 20:15

Los pandas pueden hacer esto sin que tú hagas nada, de verdad. Te mostraré un ejemplo con tu lista recién duplicada, para que tengas cada lista en una fila, utilizando las columnas a-ab (creo que esto es lo que querías):

import pandas as pd

a = [['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', ''],
['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', '']]

df = pd.DataFrame(a)

df.to_csv('./Desktop/goofy.csv', index=False, sep='|')

Entonces su archivo csv se ve así:

enter image description here

Las columnas en blanco corresponden a '' en la lista.

1
Thunderwood 16 oct. 2018 a las 20:21