在Python中使用csv.writer生成CSV文件时,经常会出现每行数据之间多出一个空白行的情况,这个问题在Windows系统下尤为常见,会导致生成的CSV文件被Excel等工具打开时出现格式错乱,影响数据的正常使用。
空白行产生的原因
出现空白行的核心原因是csv.writer在写入数据时会自动添加换行符,而如果打开文件时使用的是默认的文本模式,不同操作系统会对换行符做自动转换,Windows下默认会把n转换为rn,叠加csv模块自身的换行处理,就会额外多出一个空白行。
另外如果打开文件时没有指定正确的参数,也会触发这个问题,常见的错误打开方式如下:
import csv
# 错误示例:未指定 newline 参数
with open('test.csv', 'w', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '年龄'])
writer.writerow(['张三', 20])
上述代码在Windows系统下运行后,生成的CSV文件每行之间就会出现空白行。
解决方法
方法一:打开文件时指定newline参数
在Python 3中,打开文件用于写入CSV时,需要显式指定newline=''参数,避免操作系统对换行符做自动转换,让csv模块自己控制换行逻辑,这是最推荐的解决方式。
import csv
# 正确示例:指定 newline 参数
with open('test.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '年龄'])
writer.writerow(['张三', 20])
writer.writerow(['李四', 22])
这样生成的CSV文件就不会出现多余的空白行,在各类工具中打开格式都正常。
方法二:使用二进制模式打开文件(Python 2兼容方案)
如果是使用Python 2环境,没有newline参数,可以使用二进制写入模式'wb'打开文件,同样可以避免换行符转换导致的空白行问题。
import csv
# Python 2 兼容方案
with open('test.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '年龄'])
writer.writerow(['张三', 20])
不过现在Python 2已经停止维护,建议优先升级到Python 3使用第一种方法。
不同场景的注意事项
如果使用csv.DictWriter生成CSV文件,同样需要遵循上述规则,打开文件时指定newline=''参数即可,示例如下:
import csv
data = [
{'姓名': '张三', '年龄': 20},
{'姓名': '李四', '年龄': 22}
]
with open('test.csv', 'w', encoding='utf-8', newline='') as f:
fieldnames = ['姓名', '年龄']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
另外如果需要兼容不同操作系统的换行习惯,还可以在csv.writer初始化时指定lineterminator参数,不过一般情况下指定newline=''已经足够应对大部分场景。
问题排查总结
当遇到CSV文件有空白行的问题时,可以按照以下步骤排查:
- 检查打开文件时是否指定了
newline=''参数(Python 3) - 检查是否使用了正确的文件打开模式,避免使用错误的文本模式
- 如果是Python 2环境,确认是否使用了
'wb'二进制模式 - 检查代码中是否有手动添加换行符的逻辑,避免重复添加换行
只要遵循上述规则,就可以彻底解决csv.writer生成CSV文件时的空白行问题,保证生成的文件格式规范可用。
Pythoncsv_writerCSV文件空白行问题修改时间:2026-06-22 18:18:45