假设我有一个非常大的文件,我只想分成更小的块并连续处理。但是,在该实现中,读取和写入这些块是瓶颈。因此,我正在寻找最好的方法。我现在正在使用cPickle,倾倒并加载块。你还有其他建议吗?
答案 0 :(得分:2)
mmap
将部分文件高速缓存映射到进程内存,允许基于指针(或在Python的情况下,基于索引/切片)访问文件中的字节。从那里你可以切割mmap对象以获取字符串,并将它们传递给cPickle.loads()
以恢复原始对象。
答案 1 :(得分:1)
您可能不会比file.read(chunksize)
更快地从文件中读取chunksize字节。你可以这样做,直到你读取少于chunksize
字节(然后你知道你已经到了最后)。 e.g:
with open('datafile') as fin:
data = fin.read(chunksize)
process(data)
while len(data) == chunksize
data = fin.read(chunksize)
process(data)
但是,既然你说你正在使用cPickle - 我不确定数据是什么样的,或者你是否正在寻找更复杂的东西......
并提出警告 - 一般来说,fileIO是您可以使用计算机执行的最慢的事情之一。如果你正在做很多事情,无论你做什么,你都可以期待它成为一个瓶颈(除非你有一个真正花哨的文件系统 - 那么你可能能够做点什么)。