Skip to main content

用于二进制数据的强大的声明性解析器/构建器

项目描述

Construct 是一个强大的二进制数据声明式解析器(和构建器)。

您无需编写命令式代码来解析一段数据,而是以声明方式定义描述数据的数据结构。由于此数据结构不是代码,因此您可以在一个方向使用它来将数据解析为 Pythonic 对象,并在另一个方向将对象转换(“构建”)为二进制数据。

该库提供了简单的原子结构(例如各种大小的整数),以及允许您形成复杂度不断增加的层次结构的复合结构。Construct 具有位和字节粒度,易于调试和测试, 易于扩展的子类系统,以及许多使您的工作更轻松的原始构造:

  • 字段:原始字节或数字类型

  • 结构和序列:将更简单的结构组合成更复杂的结构

  • 适配器:改变数据的表示方式

  • 数组/范围:重复结构

  • 元构造:使用上下文(历史)来计算数据的大小

  • if/Switch:根据上下文分支计算路径

  • 按需(惰性)解析:只读你需要的

  • 指针:在数据流中从这里跳转到那里

例子

PascalString是以长度为前缀的字符串:

>>> from construct import *
>>>
>>> PascalString = Struct("PascalString",
...     UBInt8("length"),
...     Bytes("data", lambda ctx: ctx.length),
... )
>>>
>>> PascalString.parse("\x05helloXXX")
Container({'length': 5, 'data': 'hello'})
>>> PascalString.build(Container(length = 6, data = "foobar"))
'\x06foobar'

让我们使用适配器,而不是手动指定长度:

>>> PascalString2 = ExprAdapter(PascalString,
...     encoder = lambda obj, ctx: Container(length = len(obj), data = obj),
...     decoder = lambda obj, ctx: obj.data
... )
>>> PascalString2.parse("\x05hello")
'hello'
>>> PascalString2.build("i'm a long string")
"\x11i'm a long string"

查看存储库中文件格式网络协议的更多示例。

资源

Construct 的主页是http://construct.readthedocs.org,在这里您可以找到各种文档和资源。该库本身是在github上开发的;请使用github issues报告错误,并使用 github pull-requests 发送补丁。对于一般性讨论或问题,请使用 新的讨论组

要求

Construct 应该在任何 Python 2.5-3.5 或 PyPy 实现上运行。

它唯一的要求是6,用于克服 Python 2 和 3 之间的差异。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

ak-construct-2.5.2.tar.gz (58.3 kB 查看哈希

已上传 source

内置分布

ak_construct-2.5.2-py2.py3-none-any.whl (73.2 kB 查看哈希

已上传 py2 py3