我需要在列中编写长度与CSV文件不同的列表。
我目前有:
d=lists
writer = csv.writer(fl)
for values in zip(*d):
writer.writerow(values)
仅部分有效。我怀疑正在发生的事情是它会停止拉伸到列表中最短的列表。
答案 0 :(得分: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,
答案 1 :(得分:2)
没有'整洁'写它的方法,正如你所说,zip截断到最短迭代的长度。
可能最简单的方法是使用None或空字符串填充(不确定写作者的行为是什么,使用None值):
maxlen = max([len(member) for member in d])
[member.extend([""] * (maxlen - len(member))) for member in d]
for values in zip(*d):
...
或者,你可以在for循环中构造每一行,而不是使用zip
,这样会更有效但更多的更多。
编辑:更正的例子