读取大型二进制文件python的最有效方法是什么

时间:2014-09-09 23:01:08

标签: python file binary memory-efficient

我有一个大的(21 GByte)文件,我想读入内存,然后传递给一个子程序,它透明地处理数据给我。我在Centos 6.5上使用python 2.6.6,因此升级操作系统或python不是一个选项。目前,我正在使用

f = open(image_filename, "rb")
image_file_contents=f.read()
f.close()
transparent_subroutine ( image_file_contents )

这很慢(约15分钟)。在我开始阅读文件之前,我知道文件有多大,因为我打电话     os.stat(image_filename).st_size

所以如果有意义,我可以预先分配一些内存。

谢谢

2 个答案:

答案 0 :(得分:1)

为了遵循Dietrich的建议,我测量这个mmap技术比1.7GB输入文件的一次大读取快20%

from zlib import adler32 as compute_cc

n_chunk = 1024**2
crc = 0
with open( fn ) as f:
  mm = mmap.mmap( f.fileno(), 0, prot = mmap.PROT_READ, flags = mmap.MAP_PRIVATE )
  while True:
    buf = mm.read( n_chunk )
    if not buf: break
    crc = compute_crc( buf, crc )
return crc

答案 1 :(得分:0)

使用发电机

def generator(file_location):

    with open(file_location, 'rb') as entry:

        for chunk in iter(lambda: entry.read(1024 * 8), b''):

            yield chunk


go_to_streaming = generator(file_location)