2012-05-13 16 views
12

Necesito escribir en un archivo csv usando python y cada elemento iterador debe comenzar en una nueva línea. Así que el delimitador que estoy usando es "\ n". Después de escribir cada lista, la próxima lista debe escribir desde la siguiente celda. , como a continuación:Python, transposición de una lista y escritura en un archivo CSV

lol = [[1,2,3],[4,5,6]] 

El csv será como:

1 4 
2 5 
3 6 

Lo que he intentado:

file = open("test.csv", "wb") 
fileWriter = csv.writer(file , delimiter='\n',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
spamWriter.writerow([1,2,3]) 
spamWriter = csv.writer(file , delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
spamWriter.writerow([4,5,6]) 
file.close() 

que se traduce, como a continuación:

1 
2 
3 
4 5 6 

Usando csv módulo ¿cómo puedo ge t salida como a continuación:

1 4 
2 5 
3 6 

aquí espacio significa coma en un archivo csv.

Gracias.

Respuesta

12

Sin utilizar postal, usted puede hacer esto:

import csv 

lol = [[1,2,3],[4,5,6],[7,8,9]] 
item_length = len(lol[0]) 

with open('test.csv', 'wb') as test_file: 
    file_writer = csv.writer(test_file) 
    for i in range(item_length): 
    file_writer.writerow([x[i] for x in lol]) 

Esta es la salida en test.csv:

1,4,7 
2,5,8 
3,6,9 
8

primera transponer su entrada mediante el uso de zip()

>>> zip(*lol) 
[(1, 4), (2, 5), (3, 6)] 

y después de que sólo tiene que pasar a csw.writer por ejemplo

with open("test.csv", "wb") as f: 
    fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    for row in zip(*lol): 
     fileWriter.writerow(row) 

... que se traduce a:

$ cat test.csv 
1,4 
2,5 
3,6 
+0

se escribe con [y] personaje –

0

Si está utilizando Python3 necesita abrir archivos en t formato ext "wt", más de csv tiene writerows que se puede utilizar para escribir todo a la vez. aquí es un ejemplo:

data=[("test", "value1", "value2"), ("test2", "value3", "value4")] 
with open('my.csv','wt') as out: 
    csv_out=csv.writer(out) 
    csv_out.writerows(data) 

yo sólo he dado cuenta de que la cuestión preguntar cómo transformar la lista, que es un paso separado y aquí es cómo lo haría:

lol = [[1,2,3],[4,5,6]] 
data = zip(lol[0],lol[1]) 
Cuestiones relacionadas