跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Python怎么写入CSV_csv模块读写基础与字典格式写入应用

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

相关文章