【问题标题】:Problems with _csv.Error: sequence expected_csv.Error 的问题:预期序列
【发布时间】:2018-09-06 15:10:26
【问题描述】:

我有一个 python 字典列表,我正在尝试将值写入 csv 文件,但由于某种原因,我不断收到 _csv.Error: sequence expected

这里是示例代码:

import csv
import os, sys

headers = ['id', 'Info']
data = [{'id': 1, 'Info': 'Example 1'}, {'id': 2, 'Info':'Example 2'}]

with open('all_csv.csv', 'wt') as f:
   writer = csv.writer(f, delimiter=',')
   writer.writerow(headers)
   for each in data:
      writer.writerow(each.values())

任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x csv dictionary


    【解决方案1】:

    在 python 3 中,values() 不再返回 list。你必须先转换它:

    writer.writerow(list(each.values()))
    

    请注意,字典没有排序,因此没有定义列的顺序(除非您使用的是 Python 3.6 或更高版本),因此您可能希望使用 csv.DictWriter 对象来避免您的标题与您的行不匹配。

    这是我使用csv.DictWriter 的方法:

    import csv
    
    data = [{'id': 1, 'Info': 'Example 1'}, {'id': 2, 'Info':'Example 2'}]
    
    with open('all_csv.csv', 'w', newline="") as f:
       writer = csv.DictWriter(f, fieldnames = data[0], delimiter=',')
       writer.writeheader()
       writer.writerows(data)
    

    输出是:

    Info,id
    Example 1,1
    Example 2,2
    

    【讨论】:

    • 感谢您的出色帮助。标题在 9 列中,有没有办法简单地定义列表中的标题?我注意到我的输出现在已经混乱了:(
    • 传递headers 作为字段名也应该没问题。但字段名必须与键完全匹配。
    • 你是救生员 :)
    猜你喜欢
    • 2012-09-05
    • 2014-09-05
    • 2020-06-15
    • 2012-05-18
    • 1970-01-01
    • 2019-02-19
    • 2012-01-10
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多