读取游戏导出的两款.pkl文件时遭遇不同Pickle反序列化错误求助
游戏Dump的.pkl文件读取问题
我有两个游戏Dump出来的.pkl文件,想把它们读取成纯文本,但不清楚文件结构(生成这些Dump的程序没做转换)。我用的代码如下:
import pickle import pprint obj = pickle.load(open("encounter_fixed_paldea.pkl", "rb")) with open("out.txt", "a") as f: pprint.pprint(obj, stream=f)
读取encounter_fixed_paldea.pkl时的错误
Traceback (most recent call last): File "C:\Users\haily\OneDrive\Desktop\Files\test.py", line 4, in <module> obj = pickle.load(open("encounter_fixed_paldea.pkl", "rb")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _pickle.UnpicklingError: invalid load key, '\x19'.
读取encounter_wild_paldea.pkl时的错误
Traceback (most recent call last): File "C:\Users\haily\OneDrive\Desktop\Files\test.py", line 4, in <module> obj = pickle.load(open("encounter_wild_paldea.pkl", "rb")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _pickle.UnpicklingError: unpickling stack underflow
注:encounter_wild_paldea.pkl大小为90KB,encounter_fixed_paldea.pkl大小为9KB。
解决思路
- 这些文件不是标准Python pickle格式:游戏Dump的文件常自定义序列化规则,只是用了.pkl后缀,和Python原生pickle无关。
- 分析文件字节特征:用十六进制编辑器(如HxD)打开文件,对比标准pickle的开头字节(标准pickle通常以
\x80加版本号开头,比如\x80\x04对应Python 3.4+),判断是否为自定义格式。 - 查找游戏专属解析工具:从文件名看这是宝可梦朱紫帕底亚地区的遭遇数据,社区大概率有现成的解析项目或格式文档,可针对性搜索。
- 检查预处理需求:部分Dump文件可能经过加密、压缩或字节序转换,可尝试检查是否有压缩特征(如GZIP的
\x1f\x8b开头),或调整字节序后再尝试读取。 - 用
pickletools排查:如果文件包含部分pickle格式内容,可尝试用pickletools反汇编字节码,获取部分结构信息:import pickletools with open("encounter_fixed_paldea.pkl", "rb") as f: pickletools.dis(f)
内容的提问来源于stack exchange,提问作者LavenderTownsGhost
相关产品推荐
相关产品推荐

