2011-11-29 30 views
22

tôi cần phải đọc một tập tin CSV trong đó có lĩnh vực mà có một dấu phẩy, vì vậy tôi đã tăng gấp đôi trích dẫn các lĩnh vực, trong đó có dấu phẩy, chẳng hạn như:đọc tệp CSV với dấu phẩy trong các lĩnh vực bằng Python

1, "text1,text2", "text3, text4", a, b, c 

Nhưng khi tôi cố gắng đọc các tập tin bằng Python tôi nhận được các lĩnh vực được phân cách bởi các dấu phẩy, như sau:

row[0] = 1 
row[1] = text1 
row[2] = text2 
row[3] = text3 
row[4] = text4 
row[5] = a 
row[6] = b 
row[7] = c 

tôi đọc tập tin với đoạn mã sau CSV:

info = csv.reader(open('./info.csv')) 
for row in info : 
    print row[0] + " * " + row[1] ... 

Có thể đọc các trường được trích dẫn kép có chứa dấu phẩy không?

Trả lời

30

Mô-đun Python csv thực sự hỗ trợ các trường được trích dẫn, ngay cả theo mặc định. Vấn đề của bạn ở đây là Python theo mặc định không bỏ qua không gian, vì vậy bạn cần sử dụng skipinitialspace=True.

>>> s = StringIO.StringIO('1, "text1,text2", "text3, text4", a, b, c') 
>>> list(csv.reader(s, skipinitialspace=True)) 
[['1', 'text1,text2', 'text3, text4', 'a', 'b', 'c']] 
+5

'sniff csv.Sniffer() (s) .__ dict__' sẽ thấy nó quá:. ' { '__doc__': Không, '__module__': 'csv, '_name': 'ngửi ' 'delimiter':', ', 'doublequote': False, 'lineterminator': '\ r \ n', 'quotechar': '"', 'trích': 0, 'skipinitialspace' : True} ' – eumiro

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