一种强大的二进制数据声明对称解析器/生成器

construct的Python项目详细描述


construct是一个强大的声明性对称性解析器和二进制数据生成器。

与编写命令代码来解析一段数据不同,您可以声明性地定义描述数据的数据结构。由于此数据结构不是代码,因此可以在一个方向上使用它将数据parse解析为pythonic对象,在另一个方向上使用它将对象build生成为二进制数据。

库提供了简单、原子结构(如各种大小的整数)以及复合型结构,它们允许形成复杂的递阶和顺序结构。构造功能位和字节粒度,易于调试和测试,一个易于扩展的子类系统,以及许多使您的工作更轻松的基本构造:

  • 字段:原始字节或数字类型
  • 结构和序列:将更简单的结构组合成更复杂的结构
  • 按位:将字节拆分为位粒度字段
  • 适配器:更改数据的表示方式
  • 数组/范围:重复构造
  • 元结构:使用上下文(历史)计算数据大小
  • if/switch:基于上下文分支计算路径
  • 按需(延迟)解析:仅读取和解析所需内容
  • 指针:在数据流中从这里跳到那里
  • 隧道:用字节数给数据加前缀或压缩它

示例

Struct是有序命名字段的集合:

>>> format = Struct(
...     "signature" / Const(b"BMP"),
...     "width" / Int8ub,
...     "height" / Int8ub,
...     "pixels" / Array(this.width * this.height, Byte),
... )
>>> format.build(dict(width=3,height=2,pixels=[7,8,9,11,12,13]))
b'BMP\x03\x02\x07\x08\t\x0b\x0c\r'
>>> format.parse(b'BMP\x03\x02\x07\x08\t\x0b\x0c\r')
Container(signature=b'BMP')(width=3)(height=2)(pixels=[7, 8, 9, 11, 12, 13])

Sequence是有序字段的集合,不同于ArrayGreedyRange,因为这两个字段是同质的:

>>> format = Sequence(PascalString(Byte, "utf8"), GreedyRange(Byte))
>>> format.build([u"lalaland", [255,1,2]])
b'\nlalaland\xff\x01\x02'
>>> format.parse(b"\x004361789432197")
['', [52, 51, 54, 49, 55, 56, 57, 52, 51, 50, 49, 57, 55]]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否存在这样一种场景:Java7的Hashmap实现优于Java8的实现   java如何打印这些完整的数组?   java BuildException:未能执行aapt   java如何使用类。未知类型的集合返回的cast()   java准备语句返回错误的值   webview 安卓中的java显示身份验证对话框   java如何重命名列名JPA Hibernate   java查询从特定用户和特定时间段的Oracle表(通过比较原始表和备份表)中选择修改的行   java Youtube视频仅在三星S6设备上加载时自动暂停   未调用java RecyclerView getItemViewType   使用JSch setCommand执行带有源选项的java Shell ping命令时失败   java Hibernate:无法删除|删除分离的实例   Java Spring@MappedSuperclass字段作为子类中的@Id字段   java Android:确定单击了哪个按钮,因为该按钮未在xml中定义   如何计算java阵列内存使用率   使用Java查找按字母顺序排列的第一个字符串   javascript注销功能刷新页面,但页面仍已登录   当接口作为参数提供时,java依赖项注入不起作用   java中带原语的字符串扭曲