我的任务是用python3编写一个程序。我对Python还不熟悉。你知道吗
我需要从一个.bin文件中获取十六进制数据,然后在每次看到特定十六进制模式出现时对数据进行分区(例如:每个块以01 03开头)。最后,我需要输出分区的数量和每个块的大小(以字节为单位)。你知道吗
到目前为止,我已经从.bin文件中读取数据并使用关于芬德尔对每个数据块进行分区。我的正则表达式语句如下所示:
b“\x01\x03(?)?(?!\x01\x03)。)*“
你知道吗关于芬德尔工作得很好,但是我现在有一个大约300个十六进制块的列表(自从我使用关于芬德尔),我现在不知道如何检查每个块的字节大小。有人能帮我吗?你知道吗
我建议
试验结果:
当然你应该确保正则表达式是正确的。你知道吗
您可以使用
enumerate
:您最初使用
re.findall
获取源数据中遵循给定正则表达式的每个块。它们是bytes
对象,具有明确定义的长度(其中的字节数)。你知道吗使用
len
操作符,我们可以找到每个块的长度,这些长度将构成我们字典的值。如果我们做了[len(chunk) for chunk in re.findall(regex, data))]
,那会给我们一个所有找到的块的长度列表,按照它们被发现的顺序排列(这在后面会很重要)。你知道吗enumerate
是一个内置函数,允许对某个iterable对象的索引(默认从0开始)进行“标记”。所以,假设您有一个list
[5, 3, 4]
,表示块长度。如果对其应用enumerate
,则会得到tuple
s(0, 5)
(索引0,长度5)、(1, 3)
(索引1,长度3)和(2, 4)
(索引2,长度4)。你知道吗现在,通过将所有内容放在
dict
理解中,我们可以通过enumerate
创建的索引来访问块的长度。如上所述,findall
按顺序返回结果列表,枚举也按顺序操作,因此enumerate
创建的索引也是块在原始数据中的相对位置。你知道吗相关问题 更多 >
编程相关推荐