在Python中的列中将不同大小的列表写入csv
Posted
技术标签:
【中文标题】在Python中的列中将不同大小的列表写入csv【英文标题】:Write lists of different size to csv in columns in Python 【发布时间】:2014-09-22 09:32:43 【问题描述】:我需要将长度不同的列表写入 CSV 文件的列中。
我目前有:
d=lists
writer = csv.writer(fl)
for values in zip(*d):
writer.writerow(values)
仅部分有效。我怀疑正在发生的事情是它会停止压缩,直到列表长度最短的列表。
【问题讨论】:
你使用什么编程语言以及什么 csv lib? 您的问题在于您如何使用 zip。看看这个答案:***.com/questions/19686533/… @Krets 不过,我不确定这是同一个问题;那里的解决方案重复列表(如R
)。
另外,d
只是一个列表列表,对吧?
是的,d 是一个列表列表
【参考方案1】:
没有“简洁”的方式来编写它,因为正如你所说,zip 会截断到最短可迭代的长度。
可能最简单的方法是用 None 或空字符串填充(不确定 writerow 的行为是什么 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
,这会更有效但更冗长。
编辑:更正示例
【讨论】:
【参考方案2】:以下代码适用于 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,
【讨论】:
这在每行之间创建了一个空行以上是关于在Python中的列中将不同大小的列表写入csv的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 python 列表中的列和行写入 csv 文件?