用于读取和写入结构化二进制数据的python库。
binobj的Python项目详细描述
用于读写结构化二进制数据的跨平台python 3库 以面向对象(ish)的方式。
为什么要使用binobj?
您可能已经使用了python的内置struct库来加载和转储二进制文件 数据。对于更大或更复杂的数据结构和格式 弦很容易出错。binobj的不同之处在于它采用基于类的 声明二进制结构的方法。
使用struct:
data=(b'BM',1024,0,12,40,32,32,1,1,0,0,72,72,2,2)header_bytes=struct.pack('<2sIIIIiiHHIIiiII',*data)loaded=struct.unpack('<2sIIIIiiHHIIiiII',header_bytes)n_pixels=loaded[5]*loaded[6]
使用binobj:
重写的相同示例classBMP(binobj.Struct):magic=binobj.Bytes(const=b'BM')file_size=binobj.UInt32()_reserved=binobj.Bytes(const=b'\0\0\0\0',discard=True)pixels_offset=binobj.UInt32()# Legacy DIB headerheader_size=binobj.UInt32(const=40)image_width=binobj.Int32()image_height=binobj.Int32()n_color_planes=binobj.UInt16()n_bits_per_pixel=binobj.UInt16()compression_method=binobj.UInt32(default=0)bitmap_size=binobj.UInt32()v_resolution=binobj.Int32()h_resolution=binobj.Int32()n_palette_colors=binobj.UInt32()n_important_colors=binobj.UInt32()bmp=BMP(file_size=1024,pixels_offset=12,image_width=32,image_height=32,...)header_bytes=bytes(bmp)loaded=BMP.from_bytes(header_bytes)n_pixels=loaded.image_width*loaded.image_height
binobj还有其他优点,因为它支持任何编码的字符串 python支持,在每个字段的基础上切换endianness(对于iso 9660是必需的 图像),各种整数编码、计算字段、验证等。
系统要求
- 这个包将not在mixed-endian系统上工作。那些很少见 现在你很可能不会有问题。
- 这已经在Python3.5-3.8和PyPy3.5上进行了测试。
抱歉,我无意支持Python2。你可以随便叉这个然后做 如果你愿意的话,一个后门!我很有兴趣去看,甚至可能会有所贡献。
安装
您可以用pip安装它,就像这样:
pip3 install binobj
- 请确保使用pip3,而不是pip,因为pip默认为python 2。
- 如果出现“权限被拒绝”错误,请尝试:
pip3 install --user binobj
附带说明:不要使用sudo(甚至sudo -EH)强制安装包, 因为这是安全隐患。见this answer 堆栈溢出以找出原因。
测试和开发
此包使用Tox运行测试 多个版本的python。
设置
要设置开发环境,需要安装一些东西。
- 对于python版本管理,我使用pyenv-virtualenv。 按照那里的安装说明操作。
- 您还需要make。根据您的平台,您可以将其安装到
几种方法之一:
- macos:brew install make
- debian系统(例如ubuntu):sudo apt-get install make
- windows:使用Cygwin并在安装过程中安装它。
一旦您安装了它们,在这个repo的根目录中运行:
make setup
运行测试
要为所有受支持的python版本运行单元测试,请运行make test。 如果需要,将自动重建环境。
问题和功能请求
若要报告问题、请求功能或建议更改,请提交 报告项目的github页面here。
许可证
我将根据3-Clause BSD License的条款发布这个。全部 法律文本,请参见存储库中的LICENSE.txt。