NBT Parser Minecraft mca文件不是gzip压缩文件

时间:2017-11-21 13:34:20

标签: python python-3.x gzip minecraft

我尝试使用NBT 1.4.1模块(命名二进制标记读取器/写入器)从文件系统和.mca区域/ anvil文件中读取带有Python的Minecraft世界,该模块应该读取用于的NBT格式我的世界。它适用于level.dat等文件,但会为区域文件引发错误,例如r.0.0.mca

编辑:我指的是自动生成的世界文件,我的世界存储在.minecraft / saves /“MyWorld”/文件夹中。例如level.dat(有效)和存储在.minecraft / saves /“MyWorld”/ region /文件夹(例如r.0.0.mca)中的mca文件不起作用。我从我的一个世界上传了两个示例文件。

代码:

from nbt import nbt level_file = nbt.NBTFile("level.dat", "rb") # works region_file = nbt.NBTFile("r.0.0.mca", "rb")#无效

错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 508, in __init__
    self.parse_file()
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 532, in parse_file
    type = TAG_Byte(buffer=self.file)
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 85, in __init__
    self._parse_buffer(buffer)
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 90, in _parse_buffer
    self.value = self.fmt.unpack(buffer.read(self.fmt.size))[0]
  File "/usr/lib/python3.5/gzip.py", line 274, in read
    return self._buffer.read(size)
  File "/usr/lib/python3.5/_compression.py", line 68, in readinto
    data = self.read(len(byte_view))
  File "/usr/lib/python3.5/gzip.py", line 461, in read
    if not self._read_gzip_header():
  File "/usr/lib/python3.5/gzip.py", line 409, in _read_gzip_header
    raise OSError('Not a gzipped file (%r)' % magic)
OSError: Not a gzipped file (b'\x00\x00')

有关如何使其正常工作的任何建议吗?

2 个答案:

答案 0 :(得分:1)

事实证明,NBT库仅支持.mcr区域文件,该文件已在大约6年前被.mca文件取代。但是,mcedit用Python编写并支持这些文件。由于Minecraft保存格式的变化,尽管需要调整内容的解释,但是可以成功读取文件。

答案 1 :(得分:0)

r.0.0.mca绝对不是压缩的。大约80%的字节是零。