2011-10-07 18 views
8

Duplicar posibles:
How to read a CSV line with "?¿Cómo dividir una línea por comas, pero ignorar las comas entre comillas Python

he visto una serie de preguntas relacionadas pero ninguno ha abordado directamente lo Estoy tratando de hacer Estoy leyendo en líneas de texto de un archivo CSV.

Todos los artículos están entre comillas y algunos tienen comas adicionales dentro de las comillas. Me gustaría dividir la línea a lo largo de las comas, pero ignorar las comas entre comillas. ¿Hay alguna manera de hacer esto dentro de Python que no requiera un número de declaraciones de expresiones regulares?

Un ejemplo es:

"114111","Planes,Trains,and Automobiles","50","BOOK" 

que me gustaría analizado en 4 variables independientes de valores:

"114111" "Planes,Trains,and Automobiles" "50" "Book" 

¿Existe una opción simple en line.split() que me falta?

+8

utiliza el módulo csv – JBernardo

+0

@GregHewgill (y tres más): No es realmente un duplicado. La otra pregunta está específicamente más interesada en los detalles de implementación, en lugar de usar una biblioteca. – Johnsyweb

+1

"Estoy leyendo en líneas de texto de un archivo CSV". Entonces su pregunta es realmente "¿Cómo puedo analizar un archivo CSV?" Haga la pregunta que realmente quiere que responda. A menudo te ahorra mucho tiempo a ti y a los potenciales contendientes. –

Respuesta

30

No intente reinventar la rueda.

Si desea leer líneas de un archivo CSV, use Python's csv module de la biblioteca estándar.

Ejemplo:

> cat test.py 
import csv 
with open('some.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print(row) 
> cat some.csv 
"114111","Planes,Trains,and Automobiles","50","BOOK" 

> python test.py 
['114111', 'Planes,Trains,and Automobiles', '50', 'BOOK'] 
[] 

trabajo hecho!

+1

¡Gracias !, eso me dio la información que necesitaba. :) – chrisfs

+0

@chrisfs: feliz de ayudar. – Johnsyweb

-5

Probablemente se puede dividir en "" que es '[cita] [coma] [cita]'

la otra opción es dar con un carácter de escape, así que si alguien quiere insertar una coma en el cadena que hacen \ c y si quieren una barra invertida hacen \\. Luego debes dividir la cadena y luego volver a abrirla antes de procesarla.

Cuestiones relacionadas