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