4

假设我有一个非常大的文件,我只想分成更小的块并依次处理。但是,在该实现中,读取和写入这些块是瓶颈。因此,我正在寻找最好的方法。我目前正在使用 cPickle,转储和加载块。您还有其他替代建议吗?

4

2 回答 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 回答