2009-07-05 13 views
7

estoy probando el componente csv en python, y estoy teniendo algunos problemas con él.python csv pregunta

Tengo una cadena csv bastante estándar, y todas las opciones predeterminadas parecen encajar con mi prueba, pero el resultado no debería ser el grupo 1, 2, 3, 4 en una fila y 5, 6, 7, 8 en ¿una fila?

¡Muchas gracias por cualquier aclaración provista!

 
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import csv 
>>> c = "1, 2, 3, 4\n 5, 6, 7, 8\n" 
>>> test = csv.reader(c) 
>>> for t in test: 
...  print t 
... 
['1'] 
['', ''] 
[' '] 
['2'] 
['', ''] 
[' '] 
['3'] 
['', ''] 
[' '] 
['4'] 
[] 
[' '] 
['5'] 
['', ''] 
[' '] 
['6'] 
['', ''] 
[' '] 
['7'] 
['', ''] 
[' '] 
['8'] 
[] 
>>> 
+0

Tenga en cuenta que cerré esta en lugar de la más reciente porque las respuestas a la otra son útiles aquí, pero no tanto al revés. Esto todavía tiene la insignia de originalidad. – Veedrac

Respuesta

8

csv.reader espera un iterable. Usted lo dio "1, 2, 3, 4\n 5, 6, 7, 8\n"; la iteración produce personajes. Intenta darle ["1, 2, 3, 4 \ n", "5, 6, 7, 8 \ n"] - la iteración producirá líneas.

2

test = csv.reader (c.split ('\ n'))

3

csv.reader toma una línea de retorno iterable o iterador, consulte the docs. Le está pasando una cadena, que es un único carácter iterativo que regresa.

Por lo tanto, use csv.reader(c.splitlines()) o construcciones similares!

2

Para hacerlo más parecido a un archivo, intente esto.

import StringIO 
c= StringIO.StringIO("1, 2, 3, 4\n 5, 6, 7, 8\n") 

Ahora c parece un archivo. Un archivo es lo que usa con csv la mayoría (si no todas) del tiempo.