跳转到主要内容

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

项目描述

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

您不需要编写 命令式代码 来解析数据,而是声明性地定义一个 数据结构 来描述您的数据。由于这个数据结构不是代码,您可以用它来 解析 数据到Python对象,也可以用它在另一个方向上(构建)将对象转换为二进制数据。

该库提供了简单的、原子性的构建块(如各种大小的整数),以及复合构建块,允许您形成更复杂的层次结构。Construct具有 位和字节粒度、易于调试和测试、易于扩展的子类系统,以及许多原始构建块以简化您的工作

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

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

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

  • 数组/范围:复制构建块

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

  • 如果/切换:根据上下文分支计算路径

  • 按需(懒)解析:只读取您需要的内容

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

示例

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.3实现上运行。

项目详情


下载文件

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

源代码分发

cython-construct-2.5.8.tar.gz (798.8 kB 查看哈希值)

上传时间 源代码

构建分发

cython_construct-2.5.8-py3.5-win-amd64.egg (499.7 kB 查看哈希值)

上传时间 源代码

cython_construct-2.5.8-cp35-cp35m-win_amd64.whl (501.1 kB 查看哈希值)

上传时间 CPython 3.5m Windows x86-64

cython_construct-2.5.8-cp35-cp35m-macosx_10_11_x86_64.whl (681.0 kB 查看哈希值)

上传时间 CPython 3.5m macOS 10.11+ x86-64

cython-construct-2.5.8.macosx-10.11-x86_64.tar.gz (700.3 kB 查看哈希值)

上传时间 源代码

由以下支持