python中的数据格式二进制模式描述与解码

python中的数据格式二进制模式描述与解码,python,parsing,schema,binaryfiles,dfdl,Python,Parsing,Schema,Binaryfiles,Dfdl,我正在创建一些python脚本来解码各种二进制格式。 每种格式都有许多不同的记录,相当多的数据在特定字节的特定位范围内进行编码。 因此,我正在寻找一个python包,它将解码代码和格式规范巧妙地分开,这样代码就不会变得太凌乱。 理想情况下,它会让我保留不同版本的格式。 下面是我要找的东西的大致轮廓 示例my\u data\u format.xml: <format version="1A"> <record name="My first record"> &l

我正在创建一些python脚本来解码各种二进制格式。 每种格式都有许多不同的记录,相当多的数据在特定字节的特定位范围内进行编码。 因此,我正在寻找一个python包,它将解码代码和格式规范巧妙地分开,这样代码就不会变得太凌乱。 理想情况下,它会让我保留不同版本的格式。 下面是我要找的东西的大致轮廓

示例
my\u data\u format.xml

<format version="1A">
  <record name="My first record">
    <ignore bytes="2" />
    <field name="A simple number" bytes="1" convert_to="int" />
    <field name="A simple float" bytes="4" convert_to="float" />
    <array name="A list of floats" length="3">
      <field bytes="4" convert_to="float"
    </array>
    <field bytes="2">
      <ignore bits="5" />
      <bitfield name="First bit-field" num_bits="6" convert_to="uint8" />
      <bitfield name="Second bit-field" num_bits="5" convert_to="float" />
    </field>
  </record>
</format>
这将产生一本字典:

{'A simple float': 3.234,
 'A simple number': 3,
 'A list of floats': [1., 2., 3.],
 'First bit-field': 3,
 'Second bit-field': 2.0}
有这样的事吗

我已经看了一些东西:

  • 我知道这样的东西对于指定记录很有用,但据我所知,它不支持指定位字段及其解释

  • 这似乎正是我所需要的,但我只见过一个Java客户机,它看起来是一个庞大的软件包(尽管在某些地方显然有一个C版本)

  • 我当前的实现使用了一个很好的工具,但是它感觉比从文件加载模式更混乱

查看“Kaitai结构:开发二进制结构解析器的新方法”


我想您会发现它可以满足您的需要,模式不是XML,但我认为格式也比XML灵活得多

我已经找了一段时间了。好奇你是否找到了另一个选择。我使用元类将类描述转换为读写器格式,但读取速度很慢,就像一个数量级。我发表了一篇依赖cython的文章,但现在它有点像马车。哇。看起来很棒。非常感谢。
{'A simple float': 3.234,
 'A simple number': 3,
 'A list of floats': [1., 2., 3.],
 'First bit-field': 3,
 'Second bit-field': 2.0}