2011-11-09 65 views
29

Tôi có một số đầu vào trông giống như sau:Tách chuỗi trên dấu phẩy nhưng bỏ qua dấu phẩy trong dấu ngoặc kép?

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

Các giá trị bằng dấu phẩy có thể ở bất kỳ thứ tự. Tôi muốn chia chuỗi trên dấu phẩy; tuy nhiên, trong trường hợp có nội dung nào đó nằm trong dấu ngoặc kép, tôi cần nó để bỏ qua dấu phẩy và loại bỏ dấu ngoặc kép (nếu có thể). Vì vậy, về cơ bản, sản lượng sẽ là danh sách các chuỗi:

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

Tôi đã có một cái nhìn tại một số câu trả lời khác, và tôi đang nghĩ đến một biểu thức chính quy sẽ là tốt nhất, nhưng tôi khủng khiếp trong việc đưa ra với họ.

+10

Bạn đã xem xét sử dụng mô-đun [csv] (http://docs.python.org/library/csv.html) bằng Python chưa? –

Trả lời

44

Lasse là đúng; đó là tệp giá trị được phân tách bằng dấu phẩy, vì vậy bạn nên sử dụng csv module. Một ví dụ ngắn gọn:

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

Tôi không chắc chắn điều này trả lời câu hỏi. Đầu ra có phải là những gì OP đã yêu cầu không? 'Reader' được sử dụng ở đâu, hoặc nó nên như thế nào? – heltonbiker

+1

@heltonbiker Có, nó cung cấp cho đầu ra mong muốn. Vui lòng xem dòng cuối cùng của câu trả lời của tôi hoặc tự chạy mã và kiểm tra mã đó. 'csv.reader' đang được sử dụng trong dòng' for' - nó đọc một dòng từ đầu vào có thể lặp lại và chuyển đổi nó thành danh sách các ô. – agf

+0

Tốt, chỉ câu trả lời trông không đầy đủ. Cám ơn vì đã quan tâm. – heltonbiker

Các vấn đề liên quan