2011-11-09 16 views
29

I tienen alguna entrada que tiene el siguiente aspecto:¿Separe la cadena en las comas pero ignore las comas dentro de las comillas dobles?

A,B,C,"D12121",E,F,G,H,"I9,I8",J,K 

Los valores separados por comas pueden estar en cualquier orden. Me gustaría dividir la cadena en comas; sin embargo, en el caso de que algo esté entre comillas dobles, lo necesito tanto para ignorar las comas como para quitar las comillas (si es posible). Así que, básicamente, la salida sería la siguiente lista de cadenas:

['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K'] 

he tenido un vistazo a algunas otras respuestas, y estoy pensando una expresión regular sería mejor, pero soy terrible en que viene con ellos.

+10

Ha considerado el uso del módulo [CSV] (http://docs.python.org/library/csv.html) en Python? –

Respuesta

44

Lasse tiene razón; es un archivo de valores separados por comas, por lo que debe usar el csv module. Un breve ejemplo:

from csv import reader 

# test 
infile = ['A,B,C,"D12121",E,F,G,H,"I9,I8",J,K'] 
# real is probably like 
# infile = open('filename', 'r') 
# or use 'with open(...) as infile:' and indent the rest 

for line in reader(infile): 
    print line 
# for the test input, prints 
# ['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K'] 
+0

No estoy seguro de que esto responda la pregunta. ¿Sería la salida lo que OP ha pedido? ¿Dónde se usa 'reader 'aquí, o cómo debería ser? – heltonbiker

+1

@heltonbiker Sí, da la salida deseada. Mire la última línea de mi respuesta, o ejecute el código usted mismo y pruébelo. 'csv.reader' se está utilizando en la línea' for': lee una línea de la entrada iterable y la transforma en una lista de celdas. – agf

+0

Bien, solo la respuesta parecía incompleta. Gracias por preocuparte. – heltonbiker

Cuestiones relacionadas