首页 > 编程问答 >NBT 解析器 Minecraft mca 文件不是 gzip 压缩文件错误

NBT 解析器 Minecraft mca 文件不是 gzip 压缩文件错误

时间:2024-07-22 03:39:01浏览次数:14  
标签:python python-3.x gzip minecraft

我尝试使用 NBT 1.4.1 模块(命名二进制标签读取器/写入器)从文件系统和 .mca 区域/anvil 文件中使用 Python 读取 Minecraft 世界,该模块应该读取 NBT 格式在《我的世界》中使用。它对于 level.dat 等文件工作正常,但对于 r.0.0.mca 等区域文件会抛出错误

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

代码:

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')

有什么建议吗?


这个错误信息表明你正试图使用 nbt 库来解析一个 mca 文件,但 nbt 库是用来解析 NBT 格式的文件,而不是 mca 文件。尽管 mca 文件中包含了 NBT 格式的数据,但它们本身并非 NBT 文件,并且有着不同的结构。

要解析 mca 文件,你需要使用一个专门为此目的设计的库。这里有一个使用 pymclevel 库解析 mca 文件的例子:

from pymclevel import mclevel

# 加载 mca 文件
level = mclevel.fromFile("r.0.0.mca")

# 访问 chunk 数据
for chunk in level.allChunks:
  print(f"Chunk ({chunk.chunkPosition[0]}, {chunk.chunkPosition[1]}):")
  # 访问 NBT 数据
  nbt_data = chunk.Data
  # 使用 nbt 库解析 NBT 数据
  # ...

解释:

  1. 导入 mclevel : pymclevel 库中导入 mclevel 模块。
  2. 加载 mca 文件: 使用 mclevel.fromFile() 函数加载名为 "r.0.0.mca" 的 mca 文件。
  3. 遍历 chunk: 使用 level.allChunks 迭代器遍历 mca 文件中的所有 chunk。
  4. 访问 chunk 数据: 对于每个 chunk,可以使用 chunk.Data 属性访问其 NBT 数据。
  5. 解析 NBT 数据: 可以使用 nbt 库解析 chunk.Data 中的 NBT 数据。

注意:

  • 你需要安装 pymclevel 库。你可以使用 pip install pymclevel 命令来安装它。
  • 这只是一个简单的例子, pymclevel 库提供了更多用于访问和操作 mca 文件中数据的函数和属性。你可以参考该库的文档以了解更多信息。

希望这能帮到你!

标签:python,python-3.x,gzip,minecraft
From: 47414426

相关文章

  • Python 中的 azure.ai.translation.document - 无法使用当前权限访问源文档位置
    我在使用Python中的azure.ai.translation.document库时遇到问题。我已经在Azure中设置了翻译服务以及带有两个容器的Blob存储。我已使用“用户委托密钥”创建了SAS连接。一种用于源(读取/列表),一种用于目标(写入/列表)。例如我尝试运行Python程序,但源b......
  • 博文标题:探索Python中的元编程:装饰器的魔法
    引言在Python的世界里,装饰器(Decorators)是一种非常强大的特性,它允许程序员在不修改原始函数代码的情况下,为函数添加新的功能。这种机制不仅增强了代码的可读性和可维护性,还提供了高度的灵活性和扩展性。本文将深入探讨装饰器的基本概念、工作原理以及如何利用它们来简化和......
  • 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码
    在这篇博客中,我将分享如何使用Python和Selenium抓取酷狗音乐网站上的歌曲信息。我们将使用BeautifulSoup解析HTML内容,并提取歌曲和专辑信息。准备工作首先,我们需要安装一些必要的库:pipinstallrequestsbeautifulsoup4selenium代码实现以下是完整的代码:importosi......
  • 基于Django+Python的网易新闻与评论舆情热点分析平台
    一、引言在信息爆炸的时代,人们每天面对海量的信息流,如何从中筛选出有价值的信息并进行深度分析变得尤为重要。基于Django+Python的网易新闻与评论舆情热点分析平台,旨在为用户提供一个高效的数据分析工具,帮助用户快速理解新闻趋势、情感倾向以及公众对特定事件的看法。通过自......
  • Python解释器详解及其应用场景
    Python解释器及其应用场景一、Python解释器概述Python解释器是Python程序运行的核心,它负责读取Python代码(即.py文件)并将其转换为机器语言,从而使计算机能够执行。简单来说,Python解释器就像是Python代码与计算机之间的翻译官,把Python代码翻译成计算机能懂的语言。Python解释器......
  • 利用【MATLAB】和【Python】进行【图与网络模型】的高级应用与分析】
    目录一、图与网络的基本概念1.无向图与有向图2.简单图、完全图、赋权图3.顶点的度4.子图与连通性5.图的矩阵表示MATLAB代码实例Python代码实例 二、最短路径问题1.最短路径问题的定义2.Dijkstra算法MATLAB代码实例Python代码实例三、最小生成树问题1.......
  • python_wholeweek1
    目录(day1-7)一周的学习1.计算机之编程什么是编程语言什么是编程为什么要编程2.计算机组成原理计算机五大组成CPU控制器运算器内存外存输入设备输出设备(I/O设备)32位和64位32位64位多核CPU硬盘工作原理机械硬盘工作原理固态硬盘工作原理3.计算机操作系统文件是什么?应用程序是什......
  • python模块与包
    python模块与包1.模块(是一个python文件)自定义模块:(1)新建一个py文件在同一个project里然后可以用import先导入再在main里使用main.py importcc.ad(2,5)c.py defad(s,y):print(s+y)导入模块中的方法会自动实行被调用模块里所有所有语句(2)导入不同模块同一方法......
  • Python网络数据可视化全攻略【方法与技巧详解】
    ......
  • Python爬虫实战案例(爬取文字)
    爬取豆瓣电影的数据首先打开"豆瓣电影Top250"这个网页:按F12,找到网络;向上拉动,找到名称栏中的第一个,单机打开;可以在标头里看到请求URL和请求方式,复制URL(需要用到);在表头的最下面有"User-Agent",也复制下来(也可以下载pipinstallfake_useragent库,用别人写好的UA)。定位......