用通配符在字节数组中查找另一个字节数组

3

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

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应该匹配以a2开头、以42结尾的任何4字节序列。

有没有办法扩展find方法来实现这一点,或者有更好的解决方案?

使用Python 2.7,但如果需要可以切换。

1个回答

5
你可以使用正则表达式(它们适用于字节数组):
>>> import re
>>> bytes = bytearray('\x01\x02\x03\x04\x05')
>>> re.search(b'\x02.\x04',bytes).group(0)
'\x02\x03\x04'

只需使用“.”作为通配符。

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


这很不错,我不知道正则表达式可以在字节数组上工作。我会尝试并测试性能。 - snowcrash09
文件大小约为1GB,性能与没有使用正则表达式时几乎没有明显差异。谢谢! - snowcrash09

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接