You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将bytes类型CSV数据写入文件?解决写入时的类型错误

解决Bytes格式CSV内容写入文件的问题

嘿,我太懂你这种绕弯路的感觉了!你手里已经是现成的、完整的CSV格式Bytes数据,根本不需要再用csv.writer去折腾——直接把这个Bytes对象写入文件就搞定了!

最直接的解决方案

你的数据已经是最终的CSV文件内容了,用二进制写入模式打开文件,直接写入Bytes就行:

# 你的Bytes格式CSV数据
csv_bytes = b'Date,ID,Amount\r\n2018-1-1,1,25\r\n2018-1-2,2,3\r\n2018-1-1,2,3\r\n'

# 直接写入文件
with open('/Users/minhmai/test.csv', 'wb') as f:
    f.write(csv_bytes)

这样生成的文件就是带表头和3行数据的标准CSV,完全符合你的需求。

为什么之前的方法会出错?

咱们来捋捋你踩的坑:

  • 用csv.writer写入Bytes的问题:csv.writer的设计是接收字符串/列表形式的行数据,帮你转换成CSV格式。但你已经拿到了最终的CSV Bytes,再用它反而画蛇添足。而且wb模式下csv.writer会混淆数据类型,导致TypeError或_csv.Error。
  • 用io.StringIO的问题:StringIO是用来处理字符串的,你传入Bytes的话,它会把每个字节转成对应的ASCII数字(比如b'D'变成68),所以最终写入的都是数字,完全不是你要的CSV。

如果需要修改CSV内容再写入

要是你还需要对CSV数据做修改(比如调整某一行的值),那可以先把Bytes解码成字符串,再用csv模块处理:

import csv
import io

csv_bytes = b'Date,ID,Amount\r\n2018-1-1,1,25\r\n2018-1-2,2,3\r\n2018-1-1,2,3\r\n'
# 先把Bytes解码成字符串(编码格式根据你的数据调整,比如utf-8、gbk)
csv_str = csv_bytes.decode('utf-8')

# 读取CSV行数据进行修改
rows = list(csv.reader(io.StringIO(csv_str)))
rows[1][2] = '30'  # 把第一行数据的Amount改成30

# 写入修改后的内容到文件
with open('/Users/minhmai/test.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(rows)

内容的提问来源于stack exchange,提问作者Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:10:27