所以我有一个大的二进制文件(范围从256mb和2gb +,所以内存可能是一个问题),我只想从文件中选择“行”(读取:来自偏移(example of what I'm saying))。
Example file. Image it being much much larger.
假设我只想要偏移量为000000C0的数据。我该怎么做呢?
另一件有用的事情是将数据从某个偏移量读取到文件的末尾/到另一个偏移量。
如果可以的话,我是否也可以从更精确的输入中获得它?例如。 0000007C = 93 F8 43 ...文件的其余部分。
如果我们保持从一个偏移到另一个偏移,0000007C到0000007C = 93。
此外,在这些偏移处写入文件也可能是一个巨大的帮助。
如何保持偏移人类可读(又名,保持类似于00001200或00000070,以及示例)以便将来使用/解剖?
答案 0 :(得分:1)
您可以使用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
,结果会有所不同 - 一个带有read()
字节的二进制文件,而一个文本文件将read()
一个字符串并尝试处理编码。对于您的应用,您应该使用二进制模式open()
文件:"rb"
或"r+b"
。