用utf-8-sig编码写入csv可解决windows excel中文乱码问题,因其自动添加bom使excel正确识别utf-8;必须显式指定encoding='utf-8-sig'并配newline='',禁用手动拼接字符串。

csv.writer 写入中文时乱码怎么办
Windows 默认用 GBK 编码打开 CSV,但 csv.writer 默认以 UTF-8 写入,直接双击打开就会显示乱码。这不是数据错了,是打开方式不匹配。
- 保存时显式指定
encoding='utf-8-sig'(加 BOM),能让 Excel 正确识别 UTF-8 - 别用
encoding='utf-8'—— 没 BOM,Excel 会当 ANSI 处理 - 如果目标用户只用 WPS 或记事本,且必须用 GBK,才改用
encoding='gbk',但要注意字段含 emoji 或生僻字可能报错
with open('data.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['标题', '作者'])
writer.writerow(['Python 爬虫实战', '张三'])
爬取多页数据后怎么一次性写入 CSV
别每爬一页就 open(..., 'a') 追加写——容易因异常中断导致文件损坏,也难控制表头只写一次。
- 先用列表收集所有行:
rows = [['标题', '链接'], *page_data] - 全部爬完再统一写入,保证原子性
- 如果数据量极大(>10 万行),改用分批写入 +
csv.writer.writerows()批量提交,避免内存爆掉
字段含逗号、换行符或引号时怎么安全导出
csv.writer 默认已处理这些情况,但前提是:你没手动拼接字符串,也没关掉 quoting。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 永远用
writer.writerow([a, b, c]),而不是f.write(a + ',' + b) - 默认
quoting=csv.QUOTE_MINIMAL就够用;只有全部字段都要引号才设csv.QUOTE_ALL - 换行符
\n在字段里会被自动转成"line1\nline2",Excel 能正常渲染 - 如果手动设置了
quoting=csv.QUOTE_NONE又遇到逗号,必然报错Error: need to escape
用 pandas.to_csv 替代 csv.writer 合适吗
适合快速验证或小规模导出,但对爬虫场景有隐含成本。
-
pandas.to_csv()默认编码是utf-8(无 BOM),同样面临 Excel 打开乱码问题,需加encoding='utf-8-sig' - 每调一次都新建 DataFrame,内存和 CPU 开销比原生
csv.writer高不少,尤其在循环中频繁调用 - 如果后续要接数据分析,用 pandas 没问题;如果只是“爬完存下来”,原生模块更轻、更可控、错误路径更清晰
真正麻烦的不是写法,而是忘了 newline='' 参数——没有它,Windows 下会多出空行。这个细节几乎所有人第一次都踩过。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










