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)
请注意,二进制文件和文本文件都可以 seek
ed,结果会有所不同 - 二进制文件具有 read()
字节,而文本文件将 read()
字符串并尝试处理编码。对于您的应用程序,您应该 open()
您的文件采用二进制模式:"rb"
或 "r+b"
.
所以我有一个很大的二进制文件(范围从 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)
请注意,二进制文件和文本文件都可以 seek
ed,结果会有所不同 - 二进制文件具有 read()
字节,而文本文件将 read()
字符串并尝试处理编码。对于您的应用程序,您应该 open()
您的文件采用二进制模式:"rb"
或 "r+b"
.