2011-11-09 10 views
29

Ho alcuni input che è simile al seguente:Dividi la stringa su virgole ma ignora le virgole tra virgolette doppie?

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

I valori separati da virgole possono essere in qualsiasi ordine. Mi piacerebbe dividere la stringa su virgole; tuttavia, nel caso in cui qualcosa sia racchiuso tra virgolette doppie, è necessario che ignori le virgole e rimuova le virgolette (se possibile). Quindi, in pratica, l'uscita sarebbe questo lista di stringhe:

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

ho avuto uno sguardo ad alcuni altre risposte, e sto pensando un'espressione regolare sarebbe meglio, ma io sono terribile a venire con loro.

+10

Hai pensato di usare il modulo [csv] (http://docs.python.org/library/csv.html) in Python? –

risposta

44

Lasse ha ragione; è un file con valori separati da virgola, quindi è necessario utilizzare csv module. Un breve esempio:

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

Non sono sicuro che questo risponda alla domanda. L'output sarebbe quello che l'OP ha richiesto? Dove si usa 'reader' qui, o come dovrebbe essere? – heltonbiker

+1

@heltonbiker Sì, fornisce l'output desiderato. Per favore guarda l'ultima riga della mia risposta, o esegui il codice tu stesso e testalo. 'csv.reader' viene usato nella riga' for' - legge una riga dall'input iterabile e la trasforma in una lista di celle. – agf

+0

Bene, solo la risposta sembrava incompleta. Grazie per la cura. – heltonbiker

Problemi correlati