根本原因是python 3中open()默认文本模式会将\n转为\r\n,而csv.writer又写入\r\n,导致windows下出现\r\r\n空行;正确做法是open('file.csv', 'w', newline='')。

写CSV时出现空行的根本原因
Python 3 默认用 open() 打开文件写入 CSV 时,如果没显式指定 newline='',在 Windows 系统上会多出空行。这是因为 csv.writer 自己会写入 \r\n 换行符,而文件对象在文本模式下又把 \n 转成 \r\n,结果变成 \r\r\n,显示为隔行空白。
正确打开文件的写法(必须加 newline='')
关键不是改 csv.writer 参数,而是控制底层文件对象的换行行为:
-
open('data.csv', 'w', newline='')—— 文本模式写入,newline=''禁用自动换行转换 -
open('data.csv', 'wb')—— 二进制模式也可行,但需配合csv.writer的bytes处理(不推荐,增加编码负担) - 绝对不要用
open('data.csv', 'w')(缺newline)或open('data.csv', 'wt')(t是默认值,仍缺newline)
完整可运行示例
import csv
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['name', 'age'])
writer.writerow(['Alice', 30])
writer.writerow(['Bob', 25])
这个写法在 Windows/macOS/Linux 下都只生成单换行,无空行。如果漏掉 newline='',Windows 下第二行开始每行前面都会多一个空行。
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
用 pandas.to_csv 也要注意类似问题
pandas 的 to_csv() 内部已处理换行逻辑,一般不会空行;但如果传入了自定义 file 对象(比如用 StringIO 或提前 open()),仍需确保该对象以 newline='' 打开。直接传路径字符串(如 df.to_csv('x.csv'))是安全的。
容易被忽略的是:当用 open() + csv.writer 组合时,newline='' 不是可选项,是硬性要求;它不解决编码问题,也不影响字段内容,只管换行符透传是否干净。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










