使用python以字节块的形式读取文件

时间:2017-07-19 21:07:04

标签: python

我正在尝试将包含超过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)

3 个答案:

答案 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