写CSV时中文乱码需用encoding='utf-8-sig';DictWriter需显式指定fieldnames且注意键名一致;open()必须加newline=''避免空行;csv模块自动处理引号转义,勿手动拼接。
csv.writer 写入时中文乱码怎么办
Windows 默认用
编码打开 CSV,但 Python 3 的
默认用
,不显式指定编码就会在 Excel 里显示乱码。
写入时必须加
:UTF-8 加 BOM 才能让 Excel 正确识别
别用
—— Excel 会当它是 ANSI
别依赖系统默认编码,哪怕测试时看似正常,换台机器就崩
示例:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
立即学习
“
Python免费学习笔记(深入)
”;
csv.DictWriter 写字典时字段顺序错乱或报错 KeyError
不自动推断字段名,也不按字典插入顺序写——它严格依赖你传给
的列表顺序。
字段名必须和字典键完全一致(大小写、下划线都不能差)
如果字典里有额外 key,要设
,否则直接抛
如果某些行缺 key,对应列会空着,不会报错;但若设了
,就能填默认值
示例:
立即学习
“
Python免费学习笔记(深入)
”;
写入 CSV 时换行符异常或空行增多
根本原因是没传
给
。Windows 下
本身会写
,而 Python 的文本模式又会把
自动转成
,结果变成
,Excel 就多出空行。
所有写 CSV 的
都必须带
这个参数和编码无关,也不能省略或填
读 CSV 时不用加它,只写需要
用 csv 模块处理含逗号、换行符的字段会出错
CSV 标准规定:字段含逗号、双引号或换行符时,必须用双引号包裹,且内部双引号要转义为两个双引号。但很多人手动拼字符串,结果 Excel 打开后列错位。
和
默认就做这些转义,别自己
不要用
直接写,那等于裸字符串输出
如果字段本身以双引号开头结尾,
模块仍会再包一层,并转义内层引号 —— 这是正确行为,不是 bug
比如
会被安全写成:
(其中
是实际换行符)
写 CSV 看似简单,真正踩坑的地方都在编码、换行、引号这三处细节上;漏掉任意一个,导出的文件在 Excel 里就可能错位、乱码或空行——而且问题往往只在特定数据出现时才暴露。
gbkopen()utf-8encoding='utf-8-sig'encoding='utf-8'import csv
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '城市'])
writer.writerow(['张三', '杭州'])DictWriterfieldnamesextrasaction='ignore'ValueErrorrestval='N/A'import csv
rows = [{'name': '李四', 'city': '北京'}, {'name': '王五'}]
with open('dict.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['name', 'city'], restval='未知')
writer.writeheader()
writer.writerows(rows)newline=''open()csv.writer\r\n\n\r\n\r\r\nopen()newline=''Nonecsv.writercsv.DictWriterstr.replace()print(..., file=f)csvwriter.writerow(['a,b', 'line1\nline2'])"a,b","line1line2" 