用Python读写数据的最快方法?

用Python读写数据的最快方法?,python,file-io,Python,File Io,假设我有一个非常大的文件,我只想把它分成更小的块,然后依次处理。然而,在该实现中,读写这些块是瓶颈。因此,我正在寻找最好的方法。我目前正在使用cPickle,转储和加载块。你还有别的建议吗 从文件中读取chunksize字节的速度可能不会超过file.read(chunksize)。您可以这样做,直到读取的字节数小于chunksizebytes(这样您就知道您已经到达了末尾)。e、 g: 然而,由于您说您正在使用cPickle--我不确定数据是什么样子的,或者您是否正在寻找更复杂的东西 还有一个

假设我有一个非常大的文件,我只想把它分成更小的块,然后依次处理。然而,在该实现中,读写这些块是瓶颈。因此,我正在寻找最好的方法。我目前正在使用cPickle,转储和加载块。你还有别的建议吗

从文件中读取chunksize字节的速度可能不会超过
file.read(chunksize)
。您可以这样做,直到读取的字节数小于
chunksize
bytes(这样您就知道您已经到达了末尾)。e、 g:

然而,由于您说您正在使用cPickle--我不确定数据是什么样子的,或者您是否正在寻找更复杂的东西


还有一个警告——一般来说,fileIO是你用电脑能做的最慢的事情之一。如果你做了很多事情,不管你做什么,你都会认为这是一个瓶颈(除非你有一个非常奇特的文件系统——那么你也许可以做点什么)。

将文件缓存的一部分映射到进程内存中,允许基于指针(或者在Python的情况下,基于索引/切片)访问文件中的字节。从那里,您可以切片mmap对象以获取字符串,并将它们传递给
cPickle.loads()
,以便还原原始对象。

考虑将文件加载到更快的存储(如Ignacio建议的mmap)或高速缓存(如memcache或redis)。这样就加快了分割和分块的速度。如果要将内容写入磁盘,则无法从IO中逃离。您的文件有多大(我假定为Gb或Tb?),文件格式是什么?@usedTheDeathStar文件格式没有问题如果一种格式比另一种格式快,我可以转换它。问题是要找到最好的读取方法和方便的文件格式。你能把数据转换成一个简单的C结构吗?您可以使用CFFI结构将内存转储到文件,甚至可以使用mmap。在PyPy上,CFFI的速度要快很多倍。不管怎么说,硬盘速度太慢了,你甚至有时间压缩/解压数据(比如LZO压缩)。@Erogol yeah这就是为什么知道你现在使用的文件格式以及当前文件格式的文件大小很有趣的原因。
with open('datafile') as fin:
    data = fin.read(chunksize)
    process(data)
    while len(data) == chunksize
        data = fin.read(chunksize)
        process(data)