2011-11-09 12 views
29

mam jakiś wkład, który wygląda tak:Podziel ciąg na przecinki, ale zignoruj ​​przecinki w cudzysłowach?

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

Wartości oddzielone przecinkami może być w dowolnej kolejności. Chciałbym podzielić ciąg na przecinki; jednak w przypadku, gdy coś znajduje się wewnątrz podwójnego cudzysłowu, potrzebuję go, aby zignorować przecinki i usunąć znaki cudzysłowu (jeśli to możliwe). Więc w zasadzie, wyjście byłoby to lista ciągów:

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

miałem spojrzeć na kilka innych odpowiedzi, i myślę, że to wyrażenie regularne będzie najlepiej, ale jestem straszny w wymyślanie z nimi.

+10

Czy rozważałeś użycie modułu [csv] (http://docs.python.org/library/csv.html) w Pythonie? –

Odpowiedz

44

Lasse ma rację; jest to plik wartości oddzielonych przecinkami, więc powinieneś użyć csv module. Krótki przykład:

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

Nie jestem pewien, czy to odpowiada na pytanie. Czy wyniki będą tym, o co prosił OP? Gdzie jest tutaj używany "reader" lub jak powinien nim być? – heltonbiker

+1

@heltonbiker Tak, daje pożądaną wydajność. Proszę spojrzeć na ostatnią linijkę mojej odpowiedzi lub samodzielnie uruchomić kod i przetestować go. 'csv.reader' jest używany w linii' for' - odczytuje wiersz z wejścia iterowalnego i przekształca go na listę komórek. – agf

+0

Dobrze, tylko odpowiedź wyglądała na niekompletną. Dzięki za troskę. – heltonbiker

Powiązane problemy