使用缓冲读取器来处理大型.csv文件,Python

我正在尝试在python脚本中打开大型.csv文件(16k行,~15列),并且遇到了一些问题.

我使用内置的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.错误并不总是发生在同一行

解决方法:

对于3GB Ram来说16k行是没有的,很可能你的问题是其他问题,例如:你在其他一些干扰打开文件的过程中花费了太多时间.为了确保速度,当你有3GB内存时,将整个文件加载到内存中,然后解析,例如

import csv
import cStringIO
data = open("/tmp/1.csv").read()
reader = csv.DictReader(cStringIO.StringIO(data))
for row in reader:
    print row

在这至少你不应该得到文件打开错误.

上一篇:带枚举的基本python file-io变量


下一篇:python – 在numpy数组中更改的值