Python 3.6使用csv模块出现空列表的原因及修正方法
问题分析:CSV读写后出现空列表的原因
你遇到的这个空列表问题,根源在于文件打开时的换行符处理逻辑。
在Windows系统中,文本文件默认的换行符是\r\n,但如果直接用默认方式打开文件写入CSV内容,操作系统会自动把Python输出的\n转换成\r\n。而当csv.reader读取文件时,它会把额外的\r字符识别成独立的空行,最终就出现了那些莫名其妙的空列表。
修复方案
只需要在打开文件进行读写操作时,都加上newline=''参数,让csv模块自行处理换行符,就能避免这个问题。修正后的代码如下:
import csv villains = [['Doctor', 'No'], ['Rosa', 'Klebb'], ['Mister', 'Big'], ['Auric', 'Goldfinger'], ['Ernst', 'Blofeld'], ] # 写入时指定newline='',让csv模块控制换行 with open('villains', 'wt', newline='') as fout: csvout = csv.writer(fout) csvout.writerows(villains) # 读取时同样指定newline='',保证处理逻辑一致 with open('villains', 'rt', newline='') as fin: cin = csv.reader(fin) villains = [row for row in cin] print(villains)
运行这段代码后,你就能得到期望的结果:[['Doctor', 'No'], ['Rosa', 'Klebb'], ['Mister', 'Big'], ['Auric', 'Goldfinger'], ['Ernst', 'Blofeld']]
补充说明
根据Python官方文档的建议,使用csv模块读写文件时始终应该指定newline='',这样可以保证跨平台兼容性——不管是Windows、Linux还是macOS,都不会出现换行符导致的异常格式问题。
内容的提问来源于stack exchange,提问作者Jeong




