2013-07-17 41 views
19

Tôi có 5 danh sách, tất cả cùng độ dài và tôi muốn ghi chúng vào 5 cột trong CSV. Cho đến nay, tôi chỉ có thể viết một đến một cột với mã này:Viết danh sách Python vào các cột trong csv

with open('test.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for val in test_list: 
     writer.writerow([val]) 

Nếu tôi thêm một danh sách khác vào cùng một cột. Bất cứ ai biết một cách tốt để có được năm cột riêng biệt?

Trả lời

24

thay đổi chúng để hàng

rows = zip(list1,list2,list3,list4,list5) 

sau đó chỉ cần

import csv 

with open(newfilePath, "w") as f: 
    writer = csv.writer(f) 
    for row in rows: 
     writer.writerow(row) 
+0

tôi có cái gì đó như: mảng ([-. 23], dtype = float32), array ([- 0,39999986], dtype = float32 ... làm thế nào có được các giá trị thuần túy không có loại? –

4

Bạn có thể sử dụng izip để kết hợp danh sách của bạn, và sau đó lặp lại chúng

for val in itertools.izip(l1,l2,l3,l4,l5): 
    writer.writerow(val) 
+4

Cần lưu ý rằng 'itertools.izip()' không tồn tại trong Python 3.x, và 'zip()' được xây dựng sẵn cung cấp cho một trình lặp, do đó, đó là một sự thay thế thả vào. Cũng lưu ý rằng nếu bạn có một danh sách các danh sách, bạn có thể sử dụng toán tử giải nén ('zip (* lists)'). Đây là thiết kế tốt hơn so với các biến 'l1',' l2', v.v ... –

3

Các mã sau đây viết danh sách python vào các cột trong csv

import csv 
from itertools import zip_longest 
list1 = ['a', 'b', 'c', 'd', 'e'] 
list2 = ['f', 'g', 'i', 'j'] 
d = [list1, list2] 
export_data = zip_longest(*d, fillvalue = '') 
with open('numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile: 
     wr = csv.writer(myfile) 
     wr.writerow(("List1", "List2")) 
     wr.writerows(export_data) 
myfile.close() 

Kết quả trông như thế này

enter image description here

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