2009-07-05 4 views
7

Tôi chỉ đang thử nghiệm thành phần csv trong python và tôi đang gặp một số vấn đề với nó.python csv question

Tôi có chuỗi csv khá chuẩn và các tùy chọn mặc định dường như phù hợp với thử nghiệm của tôi, nhưng kết quả không nên nhóm 1, 2, 3, 4 liên tiếp và 5, 6, 7, 8 trong một hàng?

Cảm ơn rất nhiều vì đã chứng ngộ!

 
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import csv 
>>> c = "1, 2, 3, 4\n 5, 6, 7, 8\n" 
>>> test = csv.reader(c) 
>>> for t in test: 
...  print t 
... 
['1'] 
['', ''] 
[' '] 
['2'] 
['', ''] 
[' '] 
['3'] 
['', ''] 
[' '] 
['4'] 
[] 
[' '] 
['5'] 
['', ''] 
[' '] 
['6'] 
['', ''] 
[' '] 
['7'] 
['', ''] 
[' '] 
['8'] 
[] 
>>> 
+0

Lưu ý rằng tôi đã đóng cửa sổ này thay vì phiên bản mới hơn vì câu trả lời cho câu trả lời khác hữu ích ở đây, nhưng không quá nhiều theo cách khác. Điều này vẫn nhận được huy hiệu độc đáo. – Veedrac

Trả lời

8

csv.reader hy vọng một iterable. Bạn đã cho nó "1, 2, 3, 4\n 5, 6, 7, 8\n"; lặp lại tạo ra các ký tự. Thử cho nó ["1, 2, 3, 4 \ n", "5, 6, 7, 8 \ n"] - lặp lại sẽ tạo ra các dòng.

2

test = csv.reader (c.split ('\ n'))

3

csv.reader lấy đường trả về có thể lặp lại hoặc lặp lại, xem the docs. Bạn đang truyền một chuỗi, đó là một ký tự đơn có thể lặp lại có thể lặp lại được.

Vì vậy, hãy sử dụng csv.reader(c.splitlines()) hoặc các cấu trúc tương tự!

2

Để làm cho nó giống như tệp, hãy thử cách này.

import StringIO 
c= StringIO.StringIO("1, 2, 3, 4\n 5, 6, 7, 8\n") 

Bây giờ c trông giống như một tệp. Tệp là những gì bạn sử dụng với hầu hết mọi thời gian (nếu không phải là tất cả).