Construct是一个强大的二进制数据解析和构建Python库,适用于建立大型复杂应用程序的通信协议,类似于二进制数据的ORM库。
1 标准库struct
struct是用于二进制数据的解析和构建,处理Python对象和二进制数据之间的转化。它的API非常简单:
stricut.pack(fmt, v1, v2, *)
打包,Python对象到二进制数据struct.unpack(fmt, buffer)
解包,二进制数据到Python对象struct.calcsize(fmt)
计算格式字符串数据大小
2 Construct库
在开发大型应用程序中,比如实现NMS协议,直接使用 struct
模块需要写大量的代码。和数据库访问库相类比, struct
相当于 mysql-python
底层连接的角色。
- | 二进制数据 | 数据库访问 |
---|---|---|
ORM | ? | Django ORM / sqlalchemy |
Connection | struct | mysql-python / pysycopg2 |
在 Pypi 使用 “struct + binary” 搜索相关Python库,比较后,Construct是比较合适:
- github star数目为287
- 开发活跃,最新发布版本是2.8.11,时间2017-04-05。
- 支持Python3.6。
- 文档完备。
按照文档要求下载、安装、测试,基本上符合大部分需求。
声明式定义
使用 Struct 类定义数据结构。
1 | >>> format = Struct( |
组合和继承
Construct 支持原子结构和自定义结构的组合。使用 Adapter 自定义,下面为4字节存储IPv4数据的解决方案。
1 | >>> class IpAddressAdapter(Adapter): |
使用方法
1 | >>> IpAddress.parse(b"\x01\x02\x03\x04") |