Python 2.7.11:如何读取(大)二进制文件 from/at 十六进制偏移量

Python 2.7.11: How to read (big) binary file from/at hex offset

所以我有一个很大的二进制文件(范围从 256mb 到 2gb+,所以内存可能是个问题),我只想要一些选择 "lines"(阅读:从偏移量 (example of what I'm saying))来自文件。

Example file. Image it being much much larger.

假设我只想要偏移量为 000000C0 的数据。我该怎么做?

另一件有用的事情是从某个偏移量读取数据到 file/to 另一个偏移量的末尾。

如果这是可能的,我是否也只能从更精确的输入中得到它?例如。 0000007C = 93 F8 43...文件的其余部分。

如果我们保持从一个偏移到另一个偏移,则 0000007C 到 0000007C = 93。

此外,以这些偏移量写入文件也可能有很大帮助。

我将如何实现这一点,同时为将来 use/dissection 保持人类可读的偏移量(又名,使其类似于 00001200 或 00000070,示例)?

您可以使用 int(string, base=10) 函数将十六进制字符串转换为整数。从那里,使用文件句柄的 .seek(offset) 来设置您的位置。例如:

def read_from_hex_offset(file, hex_offset):
    """Fetch a single byte (or character) from file at hexadecimal offset hex_offset"""
    offset = int(hex_offset, base=16)
    file.seek(offset)
    return file.read(1)

请注意,二进制文件和文本文件都可以 seeked,结果会有所不同 - 二进制文件具有 read() 字节,而文本文件将 read() 字符串并尝试处理编码。对于您的应用程序,您应该 open() 您的文件采用二进制模式:"rb""r+b".