2013-02-21 43 views
5

Tôi đã thực hiện một số tìm kiếm nhưng hầu hết câu trả lời là về việc đọc một tệp csv hoàn chỉnh và không cái nào trong số này giống như vấn đề tôi đang gặp phải.Python - cách đọc/phân tích cú pháp csv như dòng?

Tôi đang cố gắng để đọc một tập tin từ mạng sử dụng urllib2:

request = urllib2.Request('http://.../tv.txt') 
response = urllib2.urlopen(request) 
lines = response.readlines() 
for line in lines: 
    ... 

Định dạng "dòng" trông như thế này:

"ABC", "XYZ,MNO", "KLM" 
"ABC", "MN" 
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY" 

Như đã thấy ở trên, những dòng này là không thực sự CSV dòng. Số cột tiếp tục thay đổi.

Có cách nào để tách từng dòng thành danh sách không? Kết quả mong muốn phải là:

["ABC", "XYZ,MNO", "KLM"] 
["ABC", "MN"] 
["ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"] 

Tôi đã thử sử dụng line.split (",") nhưng không thể phân tách chính xác vì có dấu phẩy bên trong mỗi cặp dấu ngoặc kép.

Hãy giúp tôi nếu bạn biết cách. Cảm ơn nhiều.

Chúc mừng,

PHP-Python-Java-MySQL-newbie.

Trả lời

8

sử dụng mô-đun csv, nó thực hiện những gì bạn cần.

yourstring= '"ABC", "XYZ,MNO", "KLM"\n"ABC", "MN"\n"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"' 

import csv 
import StringIO 

class MyDialect(csv.Dialect): 
    strict = True 
    skipinitialspace = True 
    quoting = csv.QUOTE_ALL 
    delimiter = ',' 
    quotechar = '"' 
    lineterminator = '\n' 


b=StringIO.StringIO(yourstring) 
r=csv.reader(b,MyDialect()) 

for i in r: 
    print len(i), ':',' @ '.join(i) 
+1

Như đã đề cập trong câu hỏi, tôi đã thử mô-đun csv. Nếu bạn có thể chỉ cho tôi chức năng nào trong mô-đun csv, điều đó sẽ tuyệt vời. Tôi đã thử cho hàng trong csv.reader ([dòng]): hàng in cho mỗi http://docs.python.org/2/library/csv.html#examples này nhưng không thành công – markbse

+0

Điều đó rõ ràng đủ rồi? – LtWorf

+0

Cảm ơn bạn. Trong khi chờ đợi tôi đã thay đổi nguồn từ CSV sang định dạng JSON, do đó không kiểm tra kịch bản của bạn, nhưng sẽ đánh dấu nó là câu trả lời sau đó. – markbse

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