【问题标题】:Write lists to csv in python在python中将列表写入csv
【发布时间】:2018-11-22 01:59:37
【问题描述】:

我有这个值列表:

list_a 的输出:

list_a: [[[2.0, 4.0], [1.0, 2.0]], [[2.0, 4.0], [2.0, 3.0], [3.0, 1.0]], [[3.0, 6.0], [5.0, 5.0], [6.0, 4.0]], [[3.0, 6.0], [4.0, 7.0]], [[2.0, 4.0], [3.0, 6.0]]]

我想将其导出为特定格式的 csv 文件,以便每组值占用以下格式的单元格:

 (2.0; 4.0) | (1.0; 2.0)
 (2.0; 4.0) | (2.0; 3.0) | (3.0; 1.0)
 ...

“|”表示同一行单元格的分隔(不包含在csv文件中),单元格中的值的格式应该是括号和分号(X1; X2)

我尝试了以下方法,但得到了括号和冒号:

with open('outputdata.csv', 'w') as outfile:
    mywriter = csv.writer(outfile)

    for d in result:
        mywriter.writerow(d)

感谢任何帮助!

【问题讨论】:

  • 这不是您在 Python 中定义列表的方式。除非那是在字典或类似的东西中
  • 澄清一下,您的list_a 不是多维数组,而是列表列表。
  • 这是python list_a 的输出,是的,我修复了标题

标签: python arrays python-3.x list csv


【解决方案1】:

您可以尝试自己编写 csv,无需任何 writer 类:

with open('outputdata.csv', 'w') as f:
    for vector in list_a:
        len_ = len(vector)
        for i, point in enumerate(vector):
            f.write("({}; {})".format(*point))
            # avoid writing the last pipe
            if i != len_ - 1:
                f.write(" | ")
        f.write("\n")

内容:

(2.0; 4.0) | (1.0; 2.0)
(2.0; 4.0) | (2.0; 3.0) | (3.0; 1.0)
(3.0; 6.0) | (5.0; 5.0) | (6.0; 4.0)
(3.0; 6.0) | (4.0; 7.0)
(2.0; 4.0) | (3.0; 6.0)

【讨论】:

    【解决方案2】:

    试试这个:

    with open('outputdata.csv', 'w') as outfile:
        mywriter = csv.writer(outfile)
        for d in result:
            row = ' | '.join(['(%f; %f)' % (t[0], t[1]) for t in d])
            mywriter.writerow(d)
    

    每一行的每个元素都是一个由两个浮点数组成的数组,对吧?因此,我们使用格式字符串将[2.0, 4.0] 转换为"(2.0; 4.0)"。我们对行中的每个元组都这样做。然后,我们只需使用python的join()函数将字符|放在它们之间,并将它们全部链接成一个字符串,我们可以将其写入文件。

    【讨论】:

    • 我不想将它们链接成一个字符串而不是通过'|'连接它们我使用该符号标记一个新单元格,以便每一对 (X1;X2) 位于同一行的单个单元格中,然后我们切换行
    【解决方案3】:

    没有编写器可能更容易生成输出文件:

    SEP = ',' # Use any other separator here, if you want
    with open('outputdata.csv', 'w') as outfile:
       for line in list_a:
          outfile.write(SEP.join(['({}; {})'.format(*pair) for pair in line]))
          outfile.write("\n")
    

    【讨论】:

    • “|”表示转到同一行中的另一个单元格,不写在他的csv文件中。
    • 这就是您在示例中使用的内容。您可以改用逗号或任何其他符号。
    • 我不需要分隔符,我需要移动同一行的单元格,而不是将整行放在一个单元格中。
    • CSV 文件中的所有单元格都用分隔符分隔(通常用逗号)。这就是单元格的定义方式。如果没有分隔符,则没有单元格。我建议您尝试运行代码,然后在 excel 中打开文件。
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2019-06-22
    • 2014-09-21
    相关资源
    最近更新 更多