Python从链表写入CSV时默认出现空行的原因及疑问
Python写入CSV文件出现多余空行的原因及解决方法
问题现象
使用csv模块写入CSV时,生成的文件每行之间多出了空行,原始代码如下:
import csv # field names fields = ['Name', 'Branch', 'Year', 'CGPA'] # data rows of csv file rows = [ ['Nikhil', 'COE', '2', '9.0'], ['Sanchit', 'COE', '2', '9.1'], ['Aditya', 'IT', '2', '9.3'], ['Sagar', 'SE', '1', '9.5'], ['Prateek', 'MCE', '3', '7.8'], ['Sahil', 'EP', '2', '9.1']] with open('Test.csv', 'w') as f: # using csv.writer method from CSV package write = csv.writer(f) write.writerow(fields) write.writerows(rows)
生成的CSV内容:
Name,Branch,Year,CGPA Nikhil,COE,2,9.0 Sanchit,COE,2,9.1 Aditya,IT,2,9.3 Sagar,SE,1,9.5 Prateek,MCE,3,7.8 Sahil,EP,2,9.1
原因解析
这是跨平台换行符处理冲突导致的:
- Windows系统中文本文件的标准换行符是
\r\n,Python的open()函数默认以文本模式('w')打开文件时,会自动把代码中的\n转换成系统对应的换行符。 - 但
csv.writer本身已经按照CSV规范,在每一行末尾写入了\r\n作为换行。 - 两者叠加后,每行实际写入的是
\r\n\r\n,打开文件时就会显示成空行。
这个现象并非是设计好的“作用”,而是文本模式自动换行和csv模块换行处理的冲突,属于跨平台兼容时的常见问题。
解决方法
打开文件时添加newline=''参数,禁用Python的自动换行转换,让csv模块自行处理换行逻辑:
import csv fields = ['Name', 'Branch', 'Year', 'CGPA'] rows = [ ['Nikhil', 'COE', '2', '9.0'], ['Sanchit', 'COE', '2', '9.1'], ['Aditya', 'IT', '2', '9.3'], ['Sagar', 'SE', '1', '9.5'], ['Prateek', 'MCE', '3', '7.8'], ['Sahil', 'EP', '2', '9.1']] # 添加newline=''参数 with open('Test.csv', 'w', newline='') as f: write = csv.writer(f) write.writerow(fields) write.writerows(rows)
修改后生成的CSV就不会有多余空行,符合预期格式。
内容的提问来源于stack exchange,提问作者Bending Rodriguez
相关产品推荐
相关产品推荐

