2013-07-17 3 views
19

У меня есть 5 списков с одинаковой длиной, и я бы хотел записать их в 5 столбцов в CSV. До сих пор, я могу написать только один в колонку с этим кодом:Запись списков Python в столбцы в csv

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

Если добавить еще один for цикл, он просто пишет, что список в той же колонке. Кто-нибудь знает хороший способ получить пять отдельных столбцов?

ответ

24

изменить их ряды

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

затем просто

import csv 

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

я получил что-то вроде: массив ([-. 23], DTYPE = float32), массив ([- 0.39999986], DTYPE = float32 ... как получать чистые значения без типов? –

4

Вы можете использовать izip объединить свои списки, а затем перебирать их

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

Стоит отметить, что 'itertools.izip()' не существует в Python 3.x, а встроенный 'zip()' дает итератору, так что это замена. Также обратите внимание, что если у вас есть список списков, вы можете использовать оператор распаковки ('zip (* lists)'). Это лучший дизайн, чем наличие переменных 'l1',' l2' и т. Д. ... –

3

Следующий код записывает списки питона в столбцы в 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() 

Выход выглядит следующим образом

enter image description here

Смежные вопросы