我试图在python脚本中打开大型的.csv文件(16k行+〜〜15列),并遇到一些问题。使用缓冲读取器的大型.csv文件,Python
我使用内置的open()函数打开文件,然后使用输入文件声明csv.DictReader。循环的结构是这样的:
for (i, row) in enumerate(reader):
# do stuff (send serial packet, read response)
但是,如果我使用一个文件比约20线长,该文件将打开,但有几个迭代中,我得到一个ValueError:I/O操作上一个关闭的文件。
我的想法是我可能内存不足(尽管16k行文件只有8MB,而我有3GB的内存),在这种情况下,我希望我需要使用某种缓冲区来加载只有文件的一部分一次进入内存。
我在正确的轨道上吗?或者是否还有其他原因导致文件意外关闭?
编辑:大约一半的时间我用11行csv来运行它,它给了我ValueError。错误并不总是发生在同一行
你是否使用csv.Reader获得相同的问题,并且只是在reader中对行进行迭代:do_stuff()?这是一个相对较小的文件,会遇到这种类型的问题。 – 2011-06-15 22:53:12
是的,我确实有同样的错误,当我只使用阅读器中的行时 – Trey 2011-06-15 23:01:48
这是不太可能,你内存不足。其他进程是否在文件上运行?你是否以正确的模式打开文件?如果你使用20行文件,你会得到预期的结果吗?在上面的评论中,“发送串行数据包”的含义是什么?I/O错误是否可能来自该步骤,而不是来自CSV阅读器本身?提供完整的回溯总是好的。 – 2011-06-15 23:11:29