2012-05-13 40 views
12

Tôi cần phải viết vào tệp csv bằng python và mỗi mục trình lặp sẽ bắt đầu bằng một dòng mới. Dấu phân tách mà tôi đang sử dụng là "\ n". Sau mỗi danh sách đã được viết, danh sách tiếp theo sẽ viết từ ô kế tiếp. như dưới đây:Python, chuyển danh sách và ghi sang tệp CSV

lol = [[1,2,3],[4,5,6]] 

Các csv sẽ như thế nào:

1 4 
2 5 
3 6 

Những gì tôi đã cố gắng:

file = open("test.csv", "wb") 
fileWriter = csv.writer(file , delimiter='\n',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
spamWriter.writerow([1,2,3]) 
spamWriter = csv.writer(file , delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
spamWriter.writerow([4,5,6]) 
file.close() 

Những kết quả như dưới đây:

1 
2 
3 
4 5 6 

Sử dụng csv module làm thế nào tôi có thể ge t đầu ra như sau:

1 4 
2 5 
3 6 

không gian này có nghĩa là dấu phẩy trong tệp csv.

Cảm ơn.

Trả lời

12

Nếu không sử dụng zip, bạn có thể làm điều này:

import csv 

lol = [[1,2,3],[4,5,6],[7,8,9]] 
item_length = len(lol[0]) 

with open('test.csv', 'wb') as test_file: 
    file_writer = csv.writer(test_file) 
    for i in range(item_length): 
    file_writer.writerow([x[i] for x in lol]) 

chí sản lượng này vào test.csv:

1,4,7 
2,5,8 
3,6,9 
8

đầu tiên transpose đầu vào của bạn bằng cách sử dụng zip()

>>> zip(*lol) 
[(1, 4), (2, 5), (3, 6)] 

và sau đó chỉ cần vượt qua nó để csw.writer ví dụ

with open("test.csv", "wb") as f: 
    fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    for row in zip(*lol): 
     fileWriter.writerow(row) 

... Hệ quả là để:

$ cat test.csv 
1,4 
2,5 
3,6 
+0

nó viết với ký tự [và] –

0

Nếu bạn đang sử dụng Python3, bạn cần mở tệp bằng t định dạng mở rộng "wt", hơn csvwriterows có thể được sử dụng để viết mọi thứ cùng một lúc. đây là một ví dụ:

data=[("test", "value1", "value2"), ("test2", "value3", "value4")] 
with open('my.csv','wt') as out: 
    csv_out=csv.writer(out) 
    csv_out.writerows(data) 

Tôi vừa mới nhận thấy rằng các câu hỏi hỏi làm thế nào để chuyển đổi danh sách, đó là một bước riêng biệt và đây là cách tôi sẽ làm điều đó:

lol = [[1,2,3],[4,5,6]] 
data = zip(lol[0],lol[1]) 
Các vấn đề liên quan