【问题标题】:Write lists of different size to csv in columns in Python在Python中的列中将不同大小的列表写入csv
【发布时间】:2014-09-22 09:32:43
【问题描述】:

我需要将长度不同的列表写入 CSV 文件的列中。

我目前有:

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

仅部分有效。我怀疑正在发生的事情是它会停止压缩,直到列表长度最短的列表。

【问题讨论】:

  • 你使用什么编程语言以及什么 csv lib?
  • 您的问题在于您如何使用 zip。看看这个答案:stackoverflow.com/questions/19686533/…
  • @Krets 不过,我不确定这是同一个问题;那里的解决方案重复列表(如R)。
  • 另外,d 只是一个列表列表,对吧?
  • 是的,d 是一个列表列表

标签: python list csv


【解决方案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,
    

    【讨论】:

    • 这在每行之间创建了一个空行
    猜你喜欢
    • 2013-07-16
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多