我基本上有一个文件,我希望搜索一个特定的十六进制值(页眉),一旦找到它,从那个十六进制值位置(页眉)读取所有内容,直到找到一个特定的十六进制值(页脚)
我有一些起始代码:
import binascii
holdhd = ""
holdft = ""
header = "03AABBCC"
footer = "FF00FFAA"
with open ('hexfile', 'rb') as file:
bytes = file.read()
a = binascii.hexlify(bytes)
while header in a:
holdhd = header
print holdhd
这将打印出我希望成功找到的头(文件中有多个头),但是我不确定如何从此时开始读取文件并打印出所有内容,直到找到footer
。
提前谢谢
给定文件大小,您可能希望将所有内容加载到内存中(将数据保存为字节),然后使用正则表达式提取页眉和页脚之间的部分,例如:
如果文件足够小,可以将其加载到内存中,则可以将其视为常规字符串,并使用
find
方法(请参见here)导航文件。让我们来看看更糟糕的情况:您不能保证您的头将是文件中的第一件事,而且您可能有多个正文(多个
<header><body><footer>
块)我创建了一个名为bindata.txt
的文件,其中包含以下内容:好的,有两个实体,第一个是
AAAAAA
,第二个是BBBBBB
,还有一些垃圾在开头、中间和结尾(ABCD
在第一个页眉之前,ABCDABCD
在第二个页眉之前,ABCD
在第二个页脚之后)玩
str
对象的find
方法和索引,下面是我想到的:结果是:
如果您的文件太大而无法保存在内存中,我认为最好的方法是逐字节读取文件,并创建两个函数来查找页眉结束位置和页脚开始使用文件的seek和tell方法。
编辑:
根据OP的要求,方法不必使用hexlify(使用原始二进制)和seek-and-tell:
此方法生成以下输出:
注意,我使用了Python的mmap模块来帮助移动文件。请看一下它的documentation。此外,本例的第一部分包含一些数据,用于在
sample.data
中创建实际的二进制文件。块的执行:生成以下(真正可读的)文件:
相关问题 更多 >
编程相关推荐