gpt4 book ai didi

python - CSV 阅读器对象不读取整个文件 [Python]

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:27 25 4
gpt4 key购买 nike

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

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

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

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

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

 for row in reader:                                                          
print row

这是失败的输出部分:

['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', 'non-athlete', 'enrolled']。

关于可能导致此问题的任何想法?提前致谢!

编辑:

以下是 CVS 文件中发生错误的区域周围的行:

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

最佳答案

我敢打赌这就是问题所在,尽管很难确定您只向我们展示了 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 进行阅读时,您还没有关闭new.csv 进行写入。所以最后一个缓冲区还没有被刷新到磁盘。所以你看不到它。

但是,当您的脚本完成时,writer 超出范围,文件对象不再有任何引用,因此它被刷新并关闭。因此,当您从程序外部检查它时,在脚本完成后,它就完成了。 (请注意,明确不能保证此行为;您只是走运而已。)

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

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

关于python - CSV 阅读器对象不读取整个文件 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com