CSV读取器对象无法读取整个文件

2024-10-01 11:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个使用python中的csv模块的项目。我创建了一个单独的类来打开一个预先存在的csv文件,修改每一行的数据,然后将数据保存到一个新的csv文件中。在

原始文件有1438行,通过在处理写入的类中放置一些测试代码,它表明它正在向新的csv文件写入1438行。检查文件本身后,新创建的文件中有1438行。但是,当我以这种方式使用标准cvs模块时:

reader = csv.reader(open('naiveData.csv', 'rb'))

它只转到第1410行(甚至不包括整行,它在行尾之前结束一个半索引)。我不知道是什么原因造成的。在

这就是我访问阅读器的方式:

^{pr2}$

以下是输出失败的部分:

['UNPM', '16', '2.125', '910', 'athlete', 'enrolled'] 
['UNPM', '14', '2.357', '1020', 'non-athlete', 'enrolled']    
['UNDC', '17', '2.071', '910', 'athlete', 'unenrolled']  
['KINS', '15', '2.6', '910', 'athlete', 'enrolled']  
['PHYS', '16', '1.5', '900', 'non-']

最后一个列表应该有['PHYS'、'16'、'1.5'、'900'、'非运动员'、'注册']。在

你知道是什么原因造成的吗?提前谢谢!在

编辑:

以下是CVS文件中出错区域周围的行:

KINS,15,2.6,910,athlete,enrolled
PHYS,16,1.5,900,non-athlete,enrolled
UNPL,15,3,960,non-athlete,enrolled

Tags: 模块文件csv数据项目方式原因reader
2条回答

我也遇到过类似的问题,但最终问题是csv文件的一行中缺少逗号

我敢打赌这就是问题所在,尽管很难确定您只向我们展示了3行代码而不是一个可复制的示例。在

你在做这样的事:

old_reader = csv.reader(open('old.csv', 'rb'))
writer = csv.writer(open('new.csv', 'wb'))
for row in old_reader:
    writer.writerow(transform(row))
new_reader = csv.reader(open('new.csv', 'rb'))
for row in new_reader:
    print row

当你打开new.csv阅读时,你还没有关闭{}进行写作。所以最后一个缓冲区还没有被刷新到磁盘。所以你看不见。在

但是,当脚本完成时,writer超出了范围,file对象不再有任何引用,因此它被刷新并关闭。所以当你从程序外部检查它时,在脚本完成之后,现在它就完成了。(请注意,这种行为并没有得到明确的保证;您只是幸运而已。)

这就是为什么不应该在表达式的中间放一个open来泄露文件。请改用with语句。例如:

^{pr2}$

相关问题 更多 >