【问题标题】:Python 3 DictWriter csv BytesIO TypeErrorPython 3 DictWriter csv BytesIO TypeError
【发布时间】:2014-07-26 06:27:49
【问题描述】:

我正在使用 python 3 尝试在文件上生成 csv。 我想确保我正在编写 utf8,所以我将我的 dicts 列表的值转换为字节字符串

field_order = ['field1', 'field2', 'field3', 'field4']
stats = ... # list of dicts
output = io.BytesIO()
writer = csv.DictWriter(output, field_order)
writer.writeheader()
for stats in my_stats:
    writer.writerow({k: bytes(v, 'utf8') for k, v in stats.items()})
    csv_output = output.getvalue()

我在 writer.writeheader() 调用中遇到异常

TypeError: 'str' does not support the buffer interface

似乎没有任何方法可以更改 writerheader 以写入字节。 我做错了什么?

【问题讨论】:

    标签: python string csv python-3.x encoding


    【解决方案1】:

    csv mdoule 根据the documentation对字符串进行操作:

    Writer 对象(DictWriter 实例和由 writer() 函数)具有以下公共方法。一行必须是 Writer 对象和字典的 字符串 或数字序列 将字段名映射到字符串或数字(通过将它们传递给 str() first) 用于 DictWriter 对象。请注意,复数是 写出来的括号包围。这可能会导致一些问题 其他读取 CSV 文件的程序(假设它们支持复杂的 数字)。

    如何使用io.StringIO,然后再编码utf-8

    import csv
    import io
    
    field_order = ['field1', 'field2', 'field3', 'field4']
    my_stats = ...
    output = io.StringIO()
    writer = csv.DictWriter(output, field_order)
    writer.writeheader()
    for stats in my_stats:
        writer.writerow(stats)
    csv_output = output.getvalue().encode('utf-8')
    

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 2013-06-28
      • 1970-01-01
      • 2017-09-03
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多