【问题标题】:Write to CSV a List of Tuples of Lists将列表元组的列表写入 CSV
【发布时间】:2021-06-09 14:55:35
【问题描述】:

我有以下变量:

data = [(['a', 'b', '3'], ['c', 'a', 'r']),
        (['*', '[', 'e'], ['33', 'gh', 'ew']),
        (['23^', 're#', '4$'], ['tr', 'fF', '5%'])]

我想将data 写入 CSV 文件,如下所示:

a c
b a
3 r

* 33
[ gh
e ew

23^ tr
re# fF
4$ 5%

请注意,在每次迭代之后,我之间都有一个黑色空间。


我试过了:

import csv 
with open ('train.csv', 'w') as out:
    writer = csv.writer(out)
    for row in dataset:
        writer.writerows(row)

但不能正常工作。

【问题讨论】:

  • 不过,这不是您要编写的 CSV?
  • 确实,是的。我提到了 CSV 来简化任务。我不知道如何命名这些文件。
  • 这有点像 csv,但那些空行意味着它不完全。看起来您想要两个空格分隔的列。值本身可以有空格吗?如果是这样,如何将它们转义,以免将内部空间与分隔符混淆?
  • @Joe 看来您的文件整体上是任意的。它有什么用途?
  • 或者实际上只是writer.writerows(zip(*row))

标签: python list csv tuples


【解决方案1】:

由于这种格式不符合 CSV 规则,您可以只使用常规字符串格式来编写行。一个技巧是处理空行分隔符。假设您不想在输出文件的底部有一个额外的空白行,您可以获得一些创意。写每组前先写分隔符,但以空字符串开头,第一次写后切换为真正的分隔符。

data = [(['a', 'b', '3'], ['c', 'a', 'r']),
        (['*', '[', 'e'], ['33', 'gh', 'ew']),
        (['23^', 're#', '4$'], ['tr', 'fF', '5%'])]

with open("test.txt", "w") as file:
    group_sep = "" # group separator written first to avoid extra blank
                   # line at end of file.
    for group1, group2 in data:
        file.write(group_sep)
        group_sep = "\n"
        for cell1, cell2 in zip(group1, group2):
            file.write(f"{cell1} {cell2}\n")

【讨论】:

    【解决方案2】:

    这应该可以完成。

    data = [(['a', 'b', '3'], ['c', 'a', 'r']),
            (['*', '[', 'e'], ['33', 'gh', 'ew']),
            (['23^', 're#', '4$'], ['tr', 'fF', '5%'])]
    
    
    with open('train.txt','w') as f:
        
        for x in  [tuple(zip(x[0],x[1])) for x in data]:
            for r in x:
                f.write(' '.join(r) + '\n')
            f.write('\n')
            
    

    【讨论】:

    • 谢谢,@Chris。
    • 这会在文件末尾写一个空行。不确定这是否重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2019-04-09
    • 2021-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多