You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动