跳转到主要内容

小巧、开源许可的NBT库(Minecraft)。

项目描述

Run tests

PyNBT

PyNBT是一个小巧、开源许可(MIT)的NBT库。它支持读取和写入大端或小端NBT文件。在Py3.5-Py3.9、pypy3上经过测试并得到支持。

使用库

在您自己的程序中使用库很简单,并且能够读取、修改和保存NBT文件。

写入

注意:从版本1.1.0开始,对于添加到TAG_Compound中的TAG_*名称是可选的,因为它们将具有与键相同的名称。如果您指定了名称,它将被使用。这将与旧代码不兼容,因为现在已交换了name和value参数的位置。

from pynbt import NBTFile, TAG_Long, TAG_List, TAG_String

value = {
    'long_test': TAG_Long(104005),
    'list_test': TAG_List(TAG_String, [
        'Timmy',
        'Billy',
        'Sally'
    ])
}

nbt = NBTFile(value=value)
with open('out.nbt', 'wb') as io:
  nbt.save(io)

读取

读取很简单,将接受任何提供read()的文件对象。只需简单地将写入示例中创建的文件进行美化打印即可

from pynbt import NBTFile

with open('out.nbt', 'rb') as io:
  nbt = NBTFile(io)
  print(nbt.pretty())

这将产生以下输出

TAG_Compound(''): 2 entries
{
  TAG_Long('long_test'): 104005
  TAG_List('list_test'): 3 entries
  {
    TAG_String(None): 'Timmy'
    TAG_String(None): 'Billy'
    TAG_String(None): 'Sally'
  }
}

每个标签至少暴露两个字段,.name和.value。每个标签的值映射到Python的普通类型,如TAG_Compound的dict()和TAG_List的list()。每个标签还提供了完整的__repr__方法用于打印。这使得遍历非常简单,对于现有的Python开发者来说很熟悉。

with open('out.nbt', 'rb') as io:
  nbt = NBTFile(io)
  # Iterate over every TAG in the root compound as you would any other dict
  for name, tag in nbt.items():
      print(name, tag)

  # Print every tag in a list
  for tag in nbt['list_test']:
      print(tag)

变更日志

这些变更日志仅是摘要,并不全面。请参阅标签之间的提交历史记录以获取完整更改。

v3.0.0

  • TAG_Byte_Array现在返回和接受bytearray(),而不是字节数组列表(#18)。

v2.0.0

  • 不再支持Py2。

v1.4.0

  • 删除了口袋检测辅助工具和RegionFile,使PyNBT 处理NBT。
  • 添加了一个简单的unicode测试。

v1.3.0

  • 在nbt.py中进行内部清理,以简化一些C工作。
  • NBTFile.__init__()NBTFile.save() 的参数已更改。在大多数情况下,将 compressed=True 更改为 NBTFIle.Compression.GZIP 就足够了。
  • NBTFile.__init__()NBTFile.save() 现在不再接受路径,而是分别只接受实现 read()write() 的文件对象。
  • 现在必须在构造函数或保存 NBTFile() 之前提供 name(默认为 None 而不是 '')。

v1.2.

  • (TAG_List) 的值不再需要是 TAG_* 对象。在保存标签时将进行转换。这允许更容易地使用原生类型的列表。

v1.2.0

  • 内部代码清理。与 pocket 加载和保存(将作为助手重新实现)不兼容。
  • 轻微的速度提升。
  • (TAG_List) 现在可以被视为普通的 Python 列表(.value 指向 self)。

v1.1.0

  • 与旧代码不兼容,但允许更方便地创建 TAG_Compound。在大多数情况下,namevalue 的位置已交换。
  • name 现在是每个 TAG_* 的最后一个参数,对于 TAG_Compound 的子对象是可选的。相反,它们将作为分配给它们的键作为名称。
  • (TAG_Compound) 现在可以像字典一样处理,以便于使用。.value 简单映射到自身。

v1.0.1

  • 小错误修复。
  • 添加了对 TAG_Int_Array 的支持。

v1.0.0

  • 第一个版本。

项目详情


下载文件

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

源代码分发

PyNBT-3.1.0.tar.gz (6.9 kB 查看哈希值)

上传时间 源代码

构建分发

PyNBT-3.1.0-py3-none-any.whl (7.3 kB 查看哈希值)

上传时间 Python 3

支持者: