使用通配符在bytearray中查找bytearray

时间:2014-10-01 18:02:19

标签: python binary bytearray

我需要一些大的二进制文件来搜索特定的字节序列,例如:

find_bytes = bytearray(base64.b16decode('a226fb42'))
with open(filename, "rb") as f:
    file_bytes = bytearray(f.read())
    found_pos = file_bytes.find(find_bytes, 0)

这很好用,除非现在我希望能够将序列中的特定字节值(比如00或FF)表示为匹配任何字节的通配符,因此例如a2000042应匹配任何4字节序列以a2开头,结束42

有没有办法扩展find方法来做到这一点,还是更好的解决方案?

使用Python 2.7但愿意在必要时切换..

1 个答案:

答案 0 :(得分:4)

您可以使用正则表达式(它们适用于字节数组):

>>> import re
>>> bytes = bytearray('\x01\x02\x03\x04\x05')
>>> re.search(b'\x02.\x04',bytes).group(0)
'\x02\x03\x04'

只需使用'。'作为通配符。

可能会导致非常大的文件出现问题,因为需要先将整个文件加载到字符串中。