python - 使用通配符在 bytearray 中查找 bytearray

标签 python binary arrays

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

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 但愿意在必要时切换..

最佳答案

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

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

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

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

关于python - 使用通配符在 bytearray 中查找 bytearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147669/

相关文章:

python - 层次聚类树状图中的节点索引

python - 在 python 中打印列表会产生不需要的输出

arrays - 如果在列表中找不到类别,则 Excel 总和值(更好的编码方法)

javascript - 在reactjs中使用.filter输出item的长度

c# - C# 中的隐式数组转换

python - 在哪里可以获得 Idea 的 pycharm-debug.egg?

python - 如何使用 bool 值重命名和替换列中的值?

java - 补码误差

PHP将图像转换为二进制文件测试

java - 存储 String 对象的最压缩方式