使用 findall 遍历字节

西伯迪

我正在尝试使用一个二进制文件的设置文件来找出它的结构,以便我可以从中获取有关文件位置等的一些信息。

据我所知,有趣的数据恰好在转义字符 b'\x03\SETTING' 之后或附近 - 这是我对“LQ”感兴趣的设置示例。

\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
\x03HTAPp\x00\x00\x00\x02\x02\x00\x00\x01\x02L\x02\x00\x00\x00\x01
\x03LQ\x00\x00\x00\\\\Media\\Render_Drive\\mediafiles\\mxf\\k70255.2\\a08.56d829a7_56d82956d829a0.mxf
\x03HTAPp\\x00\x00\x00\x02\x02\x00\x00\x01\x02L\x02\x00\x00\x00\x01
\x03LQ\x00\x00\x00\\\\Media\\Render_Drive\\mediafiles\\mxf\\k70255.2\\a07.56d829a6_56d82956d829a0.mxf

所以看起来每个“句子”都以 \x03 开头 - 我在这里寻找的路径位于 LQ 设置 '\x03LQ' 之后的第 8 个字节

该文件还有我想要捕获的其他设置 - 每次看起来设置直接在转义字符之后,并由设置的简短描述和一些字节填充。

ATM 我正在​​读取二进制文件并且可以找到特定路径(仅当我知道现在有多长时)

with open(file, "rb") as abin:
            abin.seek(0) 
            data = abin.read()
            foo = re.search(b'\x03LQ', data) 
            abin.seek(foo.start() + 8) # cursor lands on 8th byte
            eg = abin.read(32)
            # so I get the path of some length as eg.....

这不是我想要的,因为我想读取整个字节串直到下一个转义字符,然后找到发生的下一个设置并读取路径。

我正在尝试使用 findall(),但它只返回一个相同的字节对象列表(似乎),我不明白如何搜索每个唯一路径和每个字节字符串的实例并从中读取数据中的某个光标位置。例如。

bar = re.findall(b'\x03LQ', data)
for bs in bar:
    foo = re.search(bs, data)
    abin.seek(foo.start() + 8)
    eg = abin.read(64)
    print('This is just the same path each time', eg)

指点一下任何人?

格利卜杜德

关键是看你的结果findall(),这将是:

[b'\x03LQ', b'\x03LQ', b'\x03LQ', ...]

您只是告诉它找到一个静态字符串,因此它会返回所有内容。为了使结果有用,您可以告诉它改为捕获给定字符串之后的内容。这是一个示例,它将抓取给定字符串之后的所有内容,直到下一个\x03字节:

findall(rb'\x03LQ([^\x03]*)', data)

括号告诉findall()你想要匹配的哪一部分,[^\x03]*意思是“匹配任意数量的不匹配的字节\x03”。您的示例的结果应该是:

[b'\x00\x00\x00\\\\Media\\Render_Drive\\mediafiles\\mxf\\k70255.2\\a08.56d829a7_56d82956d829a0.mxf\n', 
 b'\x00\x00\x00\\\\Media\\Render_Drive\\mediafiles\\mxf\\k70255.2\\a07.56d829a6_56d82956d829a0.mxf']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Array.FindAll()遍历数组

来自分类常见问题

TypeError:无法在re.findall()中的类似字节的对象上使用字符串模式

来自分类Dev

使用re.findall()的结果

来自分类Dev

将findall与arg一起使用

来自分类Dev

如果在findAll中使用beautifulsoup

来自分类Dev

使用findAll()方法的Knp分页器

来自分类Dev

使用findAll方法的Groovy过滤数组

来自分类Dev

在re库中使用findall时出错

来自分类Dev

如果在findAll中使用beautifulsoup

来自分类Dev

使用 BeautifulSoup FindAll 进行网页抓取

来自分类Dev

在 txt 文件中使用 re.findall

来自分类Dev

在熊猫中使用“findall”进行编辑距离

来自分类Dev

使用 re.findall 双斜线 - Python

来自分类Dev

使用C#MongoDB驱动程序尝试使用FindAll

来自分类Dev

使用Beautiful Soup findall在单引号之间提取文本

来自分类Dev

如何在Grails项目中使用Findall(closure)

来自分类Dev

使用BeautifulSoup排除findAll的不需要的结果

来自分类Dev

在python re.findall中使用多个标志

来自分类Dev

如何避免在Prolog中使用findall重复输出?

来自分类Dev

使用元素树findall解析XML名称空间

来自分类Dev

使用ElementTree在Python中解析XML-findall

来自分类Dev

在groovy中使用findAll和each更新地图

来自分类Dev

无法在spring数据jpa中的findAll方法中使用规范

来自分类Dev

在python 2.6中使用XML API findall()时出错

来自分类Dev

使用findAll()Spring JPA PostgreSQL时的无限循环

来自分类Dev

在理论中使用findAll选择不同的结果

来自分类Dev

如何在网页爬取时使用FindAll

来自分类Dev

Web爬网:在BeautifulSoup中使用findAll的问题

来自分类Dev

使用re.findall()从字符串文本获取日期

Related 相关文章

热门标签

归档