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

Python保存CSV文件时的编码异常与格式错误问题求解

解决Python写入含bytes元素列表到CSV的问题

错误原因分析

  1. 字符串被拆分为单独列:writerows(row)用法错误。writerows要求传入行的序列(比如[[列1,列2], [列3,列4]]),如果直接传入单个字符串或一维列表,它会把每个字符/元素当成单独列,最终导致拆分问题。
  2. bytes内容编码异常:CSV写入器仅支持字符串类型,直接写入bytes对象会引发编码混乱,必须先将bytes解码为字符串。

正确实现步骤

  1. 转换bytes为字符串:遍历列表元素,将bytes类型解码为utf-8字符串(若bytes采用其他编码,替换对应编码值即可)。
  2. 规范CSV写入格式:确保传入writerow/writerows的是正确二维结构——单行数据用writerow,多行数据用writerows。

示例代码

import csv

# 假设原始数据为含bytes的列表(单行/多行均可)
# 单行示例
data = [b'张三', '25', b'工程师', b'北京']
# 多行示例:data = [[b'张三', '25'], [b'李四', '30']]

# 处理bytes元素,统一转为字符串
processed_data = []
for item in data:
    if isinstance(item, bytes):
        processed_data.append(item.decode('utf-8'))
    else:
        processed_data.append(item)

# 写入CSV文件
with open('salva.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 写入单行数据
    writer.writerow(processed_data)
    # 若为多行数据,替换为:
    # writer.writerows(processed_data)

额外注意事项

  • newline=''是csv模块推荐写法,会让模块自动处理换行符,避免跨平台换行问题,不要手动设置newline='\n'。
  • 若数据包含逗号、引号等特殊字符,可设置quoting=csv.QUOTE_ALL让写入器自动给所有字段加引号,避免列拆分错误:
writer = csv.writer(f, quoting=csv.QUOTE_ALL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:50:40