解包和转换字节-Python

时间:2017-07-20 13:43:52

标签: python

我正在尝试解压缩包含1 billion bytes的文件,该文件编码每个4字节的整数。所以每4个字节是一个不同的整数。我显然需要为这么大的文件填充我的代码。我目前有以下内容: -

import os
z =os.path.getsize(x)
import struct
with open(x, "rb") as f:
    while True: 
        this_chunk = min(50000000, z)
        data = f.read(this_chunk)
        ints1 = struct.unpack("I" * (this_chunk //4) , data)
        if not data:
            break 
    print(ints1)

我收到的错误如下: -

  

struct.error:unpack需要一个长度为50000000的字节对象

您能否帮我理解这个错误以及如何解决?谢谢!

1 个答案:

答案 0 :(得分:1)

您需要跟踪读取的块。我建议使用富有表现力的变量名称而不是xz。主要问题在于您上次阅读时,您想要读取sizeremaining的数量,而不是完整的数量。试试这个(未经测试的)

filesize = os.path.getsize(x)
chunksread = 0
chunksize = 50000000
sizeremaining = filesize

with open(filename, "rb") as f:
    while sizeremaining > 0:
        this_chunk = min(chunksize, sizeremaining)
        data = f.read(this_chunk)
        ints1 = struct.unpack("I" * (this_chunk //4) , data)
        sizeremaining -= this_chunk
        if not data:
            break 
    print(ints1)