我正在尝试将包含超过10亿字节的文件转换为整数。显然,我的机器不能同时执行此操作,因此我需要将代码分块。我能够解码前50,000,000字节,但我想知道如何读取文件中的整数介于50,000,001和100,000,000之间,150,000,000和200,000,000等等。以下是我现在所拥有的;范围功能不适用于此。
import struct
with open(x, "rb") as f:
this_chunk = range(50000001, 100000000)
data = f.read(this_chunk)
ints1 = struct.unpack("I" * (this_chunk //4) , data)
print(ints1)
答案 0 :(得分:1)
您可以使用f.seek(offset)
将文件指针设置为从某个偏移开始读取。
在您的情况下,您希望跳过5000000
字节,因此您需要调用
f.seek(50000000)
此时,您想要阅读其他50000000
个字节,因此您需要拨打f.read(50000000)
。
这将是您的完整代码清单,实施f.seek
并阅读整个文件:
with open(x, "rb") as f:
f.seek(50000000) # omit if you don't want to skip this chunk
data = f.read(50000000)
while data:
... # do something
data = f.read(50000000)
答案 1 :(得分:0)
您无法使用迭代器作为参数调用内置函数read()
。请阅读this
答案 2 :(得分:0)
在循环中使用f.read(50000000)
会在50000000
的块中读取文件,例如:
In []:
from io import StringIO
s = '''hello'''
with StringIO(s) as f:
while True:
c = f.read(2)
if not c:
break
print(c)
Out[]:
he
ll
o