Python 3 DictWriter csv BytesIO TypeError

时间:2014-07-26 06:27:50

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

我正在使用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来写字节。 我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

  

Writer对象(DictWriter实例和返回的对象)   writer()函数)具有以下公共方法。一行必须是a   字符串的序列或Writer对象和字典的数字   将字段名称映射到字符串或数字(通过传递它们)   str()first)用于DictWriter对象。请注意,复数是   写出被parens包围。这可能会导致一些问题   其他读取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')