2014-07-30 3 views
0

Мне нужно написать списки, которые по-разному различаются по CSV-файлу в столбцах.Запись списков разного размера в csv в столбцах в Python

я в настоящее время:

d=lists 
writer = csv.writer(fl) 
for values in zip(*d): 
    writer.writerow(values) 

, который работает только частично. Я подозреваю, что это происходит, так это то, что он перестает зажиматься до списков со списком самой короткой длины.

+0

Какой язык программирования вы используете и то, что CSV Lib? –

+0

Ваша проблема в том, как вы используете zip. Проверьте этот ответ: http://stackoverflow.com/questions/19686533/how-to-zip-two-different-size-list-in-python – Krets

+0

@ Krets Я не уверен, что это тот же вопрос; решения там повторяют списки (как в 'R'). –

ответ

5

код ниже для Python 3. Если вы используете Python 2, импорт izip_longest вместо zip_longest.

import csv 
from itertools import zip_longest 

d = [[2,3,4,8],[5,6]] 

with open("file.csv","w+") as f: 
    writer = csv.writer(f) 
    for values in zip_longest(*d): 
     writer.writerow(values) 

Результат:

2,5 
3,6 
4, 
8, 
+0

Отлично! Благодарю. –

2

Нет никакого «аккуратного» способа написать его, поскольку, как вы сказали, zip усекает до длины кратчайшего итерабельного.

Вероятно, самым простым способом было бы просто площадку с None или пустыми строками (не уверен, экспромтом, что поведение writerow это ни с значениями):

maxlen = max([len(member) for member in d]) 
[member.extend([""] * (maxlen - len(member))) for member in d] 
for values in zip(*d): 
    ... 

Альтернативно, можно просто построить каждую строку внутри for loop вместо использования zip, что было бы более эффективным, но многословным.

EDIT: исправлен пример

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