使用Python csv.writer写入CSV时每行后空行的原因及解决
为什么Python写入CSV后每行末尾会出现空行?
我来帮你拆解这个问题的原因,以及给出简单的解决办法:
问题根源
这个空行问题大多出现在Windows系统中,核心原因是换行符的双重处理:
- Python的
csv模块在写入每行时,会自动添加符合CSV标准的行结束符(通常是\r\n); - 当你用默认文本模式
'w'打开文件时,Windows的文件系统会把代码里的\n自动转换成\r\n; - 两者叠加后,每行结尾就变成了
\r\r\n,用普通文本编辑器打开时就会显示出额外的空行。
解决方法
有两种简单可靠的方式可以避免这个问题:
方法1:打开文件时指定newline=''(Python 3+推荐)
修改文件打开语句,添加newline=''参数,让文件对象不自动处理换行符,完全交给csv模块来生成正确的行结束符:
import csv z = [["test","dus"],["dus","ta"]] with open('test.csv','w', newline='') as out: csv_out = csv.writer(out) csv_out.writerow(['input','output']) for row in z: csv_out.writerow(row)
方法2:用二进制模式打开文件(兼容Python 2)
如果你还在使用Python 2,或者需要兼容旧代码,可以用二进制模式'wb'打开文件,这样系统不会对换行符做任何转换:
import csv z = [["test","dus"],["dus","ta"]] with open('test.csv','wb') as out: csv_out = csv.writer(out) csv_out.writerow(['input','output']) for row in z: csv_out.writerow(row)
补充说明
在Linux或macOS系统中,默认换行符是\n,不会出现这种双重转换的问题,所以你大概率不会遇到这个空行困扰。
内容的提问来源于stack exchange,提问作者user3646742
相关产品推荐
相关产品推荐

