在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 中的列

如何将数据从 python 列表中的列和行写入 csv 文件?

两个布尔列/列表是不是匹配?两个不同大小的列的比较:一个列表的一部分是不是与另一个列表的一部分匹配? (Python)

在 Python 中将列表写入 CSV [重复]

在 Python 中将 CSV 与不同的列合并

在 Python 中将具有不同类型的项目列表作为字符串加入