2011-09-23 88 views
13

everyone.Io ho una lista di liste e voglio scriverle in un file csv con colonne e righe. Ho provato gli scrittori ma non è quello che voglio.Un esempio della mia lista è il seguente:Come scrivere i dati nel file csv in colonne e righe da un elenco in python?

[[1, 2], [2, 3], [4, 5]] 

Grazie per qualsiasi aiuto.

Con questo:

example=csv.writer(open('test.csv', 'wb'), delimiter=' ') 
example.writerows([[1, 2], [2, 3], [4, 5]]) 

ottengo 1 2 in una cella, 2 3 in una cella etc.And non 1 in una cella e 2 nella cella accanto.

avrei dovuto essere più clear.I bisogno di scrivere questa lista esempio in un file in modo che quando l'ho aperto con Excel ogni elemento è nella sua cella. mio output dovrebbe essere simile a questo:

1 2 
2 3 
4 5 

Ogni elemento nella cella spettacolo diverso.

+1

"in una cella" non ha molto senso nel mondo csv. In ogni caso, il tuo codice * FA * fa quello che dici di volere. Come stai visualizzando il file di output ?? –

risposta

14

Gli esempi forniti, utilizzando csv moduli, sono grandi! Inoltre, è sempre possibile semplicemente scrivere in un file di testo utilizzando stringhe formattate, come il seguente esempio provvisorio:

l = [[1, 2], [2, 3], [4, 5]] 

out = open('out.csv', 'w') 
for row in l: 
    for column in row: 
     out.write('%d;' % column) 
    out.write('\n') 
out.close() 

ho usato ; come separatore, perché funziona meglio con Excell (una delle vostre esigenze).

Spero che aiuti!

+1

Hai un extra; alla fine di ogni riga. Scrivere una cella alla volta è goffo. A; funziona meglio con Excel ** SOLO ** nelle versioni locali che utilizzano una virgola come punto decimale. Perché mostrare all'OP questa roba fai da te quando tutto ciò di cui ha bisogno è un po 'da modificare alla sua chiamata a 'csv.writer' ?? –

+0

@John Machin: qualche altro lettore potrebbe preferire questo approccio. Dubito che l'OP tornerebbe a fare DIY se sta già usando 'csv'. Ma penso che SO sia un posto in cui puoi imparare nuovi modi di fare le cose e scegliere tra loro. Inoltre, con l'operazione di formattazione delle stringhe puoi anche utilizzare il separatore di campo preferito, la fine della riga, ecc. – heltonbiker

2

Bene, se si sta scrivendo in un file CSV, allora perché si usa lo spazio come delimitatore? I file CSV utilizzano virgole o punti e virgola (in Excel) come delimitatori di celle, quindi se si utilizza delimiter=' ', non si sta effettivamente producendo un file CSV. Dovresti semplicemente costruire csv.writer con il delimitatore e il dialetto predefiniti. Se si desidera leggere il file CSV successivamente in Excel, è possibile specificare il dialetto di Excel in modo esplicito solo per rendere la vostra intenzione chiara (anche se questo dialetto è l'impostazione predefinita in ogni caso):

example = csv.writer(open("test.csv", "wb"), dialect="excel") 
10
>>> import csv 
>>> with open('test.csv', 'wb') as f: 
...  wtr = csv.writer(f, delimiter= ' ') 
...  wtr.writerows([[1, 2], [2, 3], [4, 5]]) 
... 
>>> with open('test.csv', 'r') as f: 
...  for line in f: 
...   print line, 
... 
1 2 <<=== Exactly what you said that you wanted. 
2 3 
4 5 
>>> 

per ottenere in modo che può essere caricato in modo ragionevole da Excel, è necessario utilizzare una virgola (il default csv) come delimitatore, a meno che non ci si trovi in ​​una localizzazione (ad es. Europa) in cui è necessario un punto e virgola.

2

avere un andare con questi codice:

>>> import pyexcel as pe 
>>> sheet = pe.Sheet(data) 
>>> data=[[1, 2], [2, 3], [4, 5]] 
>>> sheet 
Sheet Name: pyexcel 
+---+---+ 
| 1 | 2 | 
+---+---+ 
| 2 | 3 | 
+---+---+ 
| 4 | 5 | 
+---+---+ 
>>> sheet.save_as("one.csv") 
>>> b = [[126, 125, 123, 122, 123, 125, 128, 127, 128, 129, 130, 130, 128, 126, 124, 126, 126, 128, 129, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 133, 134, 135, 134, 133, 133, 134, 135, 136], [135, 135, 136, 137, 137, 136, 134, 135, 135, 135, 134, 134, 133, 133, 133, 134, 134, 134, 133, 133, 132, 132, 132, 135, 135, 133, 133, 133, 133, 135, 135, 131, 135, 136, 134, 133, 136, 137, 136, 133, 134, 135, 136, 136, 135, 134, 133, 133, 134, 135, 136, 136, 136, 135, 134, 135, 138, 138, 135, 135, 138, 138, 135, 139], [137, 135, 136, 138, 139, 137, 135, 142, 139, 137, 139, 138, 136, 137, 141, 138, 138, 139, 139, 139, 139, 138, 138, 138, 138, 137, 137, 137, 137, 138, 138, 136, 137, 137, 137, 137, 137, 137, 138, 148, 144, 140, 138, 137, 138, 138, 138, 137, 137, 137, 137, 137, 138, 139, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141], [141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 141, 142, 143, 138, 138, 138, 139, 139, 140, 140, 140, 141, 140, 139, 139, 141, 141, 140, 139, 145, 137, 137, 145, 145, 137, 137, 144, 141, 139, 146, 134, 145, 140, 149, 144, 145, 142, 140, 141, 144, 145, 142, 139, 140]] 
>>> s2 = pe.Sheet(b) 
>>> s2 
Sheet Name: pyexcel 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
| 126 | 125 | 123 | 122 | 123 | 125 | 128 | 127 | 128 | 129 | 130 | 130 | 128 | 126 | 124 | 126 | 126 | 128 | 129 | 130 | 130 | 130 | 130 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 134 | 134 | 134 | 134 | 134 | 134 | 134 | 134 | 133 | 134 | 135 | 134 | 133 | 133 | 134 | 135 | 136 | 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
| 135 | 135 | 136 | 137 | 137 | 136 | 134 | 135 | 135 | 135 | 134 | 134 | 133 | 133 | 133 | 134 | 134 | 134 | 133 | 133 | 132 | 132 | 132 | 135 | 135 | 133 | 133 | 133 | 133 | 135 | 135 | 131 | 135 | 136 | 134 | 133 | 136 | 137 | 136 | 133 | 134 | 135 | 136 | 136 | 135 | 134 | 133 | 133 | 134 | 135 | 136 | 136 | 136 | 135 | 134 | 135 | 138 | 138 | 135 | 135 | 138 | 138 | 135 | 139 | 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
| 137 | 135 | 136 | 138 | 139 | 137 | 135 | 142 | 139 | 137 | 139 | 138 | 136 | 137 | 141 | 138 | 138 | 139 | 139 | 139 | 139 | 138 | 138 | 138 | 138 | 137 | 137 | 137 | 137 | 138 | 138 | 136 | 137 | 137 | 137 | 137 | 137 | 137 | 138 | 148 | 144 | 140 | 138 | 137 | 138 | 138 | 138 | 137 | 137 | 137 | 137 | 137 | 138 | 139 | 140 | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
| 141 | 141 | 141 | 141 | 141 | 141 | 141 | 139 | 139 | 139 | 140 | 140 | 141 | 141 | 141 | 140 | 140 | 140 | 140 | 140 | 141 | 142 | 143 | 138 | 138 | 138 | 139 | 139 | 140 | 140 | 140 | 141 | 140 | 139 | 139 | 141 | 141 | 140 | 139 | 145 | 137 | 137 | 145 | 145 | 137 | 137 | 144 | 141 | 139 | 146 | 134 | 145 | 140 | 149 | 144 | 145 | 142 | 140 | 141 | 144 | 145 | 142 | 139 | 140 | 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
>>> s2[0,0] 
126 
>>> s2.save_as("two.csv") 
Problemi correlati