Python 3 DictWriter csv BytesIO TypeError

And*_*Kou 3 python csv string encoding python-3.x

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

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

TypeError: 'str' does not support the buffer interface
Run Code Online (Sandbox Code Playgroud)

似乎没有办法改变writerheader来写字节.我究竟做错了什么?

fal*_*tru 5

csvmdoule根据文档对字符串进行操作:

Writer对象(DictWriter实例和writer()函数返回的对象)具有以下公共方法.对于DictWriter对象,行必须是Writer对象的字符串或数字序列以及字段将字段映射到字符串或数字(通过首先传递给str()).请注意,复数会被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')
Run Code Online (Sandbox Code Playgroud)