2011-09-23 59 views
13

everyone.Tengo una lista de listas y quiero escribirlas en un archivo csv con columnas y filas. He probado los archivos de escritura pero no es lo que quiero. Un ejemplo de mi lista es la siguiente:¿Cómo escribo datos en un archivo csv en columnas y filas de una lista en python?

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

Gracias por cualquier ayuda.

Con esta:

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

me sale 1 2 en una célula, 2 3 en una célula etc.y no 1 en una celda y 2 en la celda siguiente.

Debería haber sido más claro. Necesito escribir esta lista de ejemplos en un archivo para que cuando lo abra con Excel cada elemento esté en su propia celda. Mi salida debe ser como este:

1 2 
2 3 
4 5 

Cada elemento en la celda diferent.

+1

"en una celda" no tiene mucho sentido en el mundo csv. En cualquier caso, su código * SÍ * hace lo que dice que quiere. ¿Cómo está mostrando el archivo de salida? –

Respuesta

14

Los ejemplos proporcionados, utilizando los módulos csv, ¡son excelentes! Además, siempre se puede simplemente escribir en un archivo de texto con formato utilizando cuerdas, como el siguiente ejemplo tentativa:

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() 

que utilizan ; como separador, ya que funciona mejor con Excell (una de sus necesidades).

Espero que ayude!

+1

Tienes un extra; al final de cada línea Escribir una celda a la vez es torpe. UN ; funciona mejor con Excel ** SOLO ** en configuraciones regionales que usan una coma como punto decimal. ¿Por qué mostrarle al OP este material de bricolaje cuando todo lo que necesita es un poco de retoque en su llamada a 'csv.writer' ?? –

+0

@John Machin: algún otro lector puede preferir este enfoque. Dudo que OP vuelva a hacer DIY si ya está usando 'csv'. Pero creo que SO es un lugar donde puedes aprender nuevas formas de hacer las cosas y elegir entre ellas. Además, con la operación de formateo de cadenas también puede usar su separador de campo preferido, fin de línea, etc. – heltonbiker

2

Bueno, si está escribiendo en un archivo CSV, ¿por qué utiliza el espacio como delimitador? Los archivos CSV usan comas o puntos y comas (en Excel) como delimitadores de celdas, por lo que si usa delimiter=' ', realmente no está produciendo un archivo CSV. Simplemente debe construir csv.writer con el delimitador y el dialecto predeterminados. Si desea leer el archivo CSV tarde en Excel, se puede especificar el dialecto de Excel de forma explícita sólo para hacer que su intención clara (aunque este dialecto es el valor por defecto de todos modos):

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 
>>> 

conseguirlo de manera que Excel lo puede cargar con sensatez, necesita usar una coma (el valor predeterminado de csv) como delimitador, a menos que esté en un entorno local (por ejemplo, Europa) donde necesita un punto y coma.

2

tener un ir con estos códigos:

>>> 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") 
Cuestiones relacionadas