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

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

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

最佳答案

csvmdoule根据the documentation对字符串进行操作:
writer对象(dictwriter实例和
writer()函数)具有以下公共方法。一行必须是
writer对象和字典的字符串或数字序列
将字段名映射到字符串或数字(通过传递
str()第一个)用于DictWriter对象注意复数是
写在帕伦斯的周围这可能会导致
其他读取CSV文件的程序(假设它们支持复杂的
完全是数字)。
不如使用io.StringIO,然后对其进行编码。

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')

09-25 19:38