我正在尝试解压缩包含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的字节对象
您能否帮我理解这个错误以及如何解决?谢谢!
答案 0 :(得分:1)
您需要跟踪读取的块。我建议使用富有表现力的变量名称而不是x
和z
。主要问题在于您上次阅读时,您想要读取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)