用于读取和写入结构化二进制数据的python库。

binobj的Python项目详细描述


Build statusPython versions

用于读写结构化二进制数据的跨平台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是必需的 图像),各种整数编码、计算字段、验证等。

系统要求

  • 这个包将notmixed-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

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

推荐PyPI第三方库


热门话题
Java:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?