假设我有一个非常大的文件,我只想分成更小的块并依次处理。但是,在该实现中,读取和写入这些块是瓶颈。因此,我正在寻找最好的方法。我目前正在使用 cPickle,转储和加载块。您还有其他替代建议吗?
问问题
1424 次
2 回答
2
mmap
将文件缓存的一部分映射到进程内存中,允许基于指针(或者在 Python 的情况下,基于索引/切片)访问文件中的字节。从那里您可以切片 mmap 对象以获取字符串,并将它们传递给以cPickle.loads()
恢复原始对象。
于 2013-11-06T08:06:40.877 回答
1
您可能不会比file.read(chunksize)
从文件中读取 chunksize 字节更快。你可以这样做,直到你读取的字节数少于chunksize
(然后你知道你已经结束了)。例如:
with open('datafile') as fin:
data = fin.read(chunksize)
process(data)
while len(data) == chunksize
data = fin.read(chunksize)
process(data)
但是,既然您说您正在使用 cPickle - 我不确定数据是什么样的,或者您是否正在寻找更复杂的东西......
还有一点警告——一般来说,fileIO 是你可以用你的计算机做的最慢的事情之一。如果你做了很多事情,那么无论你做什么,你都可以预料到它会成为一个瓶颈(除非你有一个非常漂亮的文件系统——那么你也许可以做点什么)。
于 2013-11-06T07:58:14.033 回答