Skip to main content
 首页 » 编程设计

python之需要帮助从 pickle 中提取二进制数据

2025年05月04日9kenshinobiy

在 MMO 游戏中用户帐户统计信息存储在 .dat 文件中。我知道这是 python 泡菜。 我对py不专业(真的我不懂这门语言)然后我就写

data = pickle.load(fp) 
pprint.pprint(data) 

我得到这样的输出

(8, 
 {(2, 1): (1315840806, 
'\x14\x00&#nNWH\x00\x00\x06\x90\xb3\x00\... lostsa bytes), 
  (2, 17): (1327141794, 
"\x14\x00\xa2\x93\x1aOS=\x00\x00\x06T\xaa\x00\x00\x8d\x06>\x00\x00\x00*\... 

我想从中提取信息。格式应该是这样的

offs byte 
  0  11 
  1  00 
  2  ac ;last batt time(4) 
  3  8d ;last batt time(4) 
  4  54 ;last batt time(4) 
  5  4d ;last batt time(4) 
  6  e8 ;battle lifetime(4) 
  7  69 ;battle lifetime(4) 
  8  00 ;battle lifetime(4) 
  9  00 ;battle lifetime(4) 
 10  04 ;maxfrags (1) 
 11  db ;xp (4) 
 12  95 ;xp (4) 
 13  00 ;xp (4) 
 14  00 ;xp (4) 
 15  6f ;maxXP (2) 
 16  06 ;maxXP (2) 

等等……

我不知道如何在python中获取字节码,以及什么是数据之王

(8, 
 {(2, 1): (1315840806, 

对象?大批?如何迭代它。我如何将数据保存为二进制字符串来分析它?代码示例值得赞赏,但继续前进的一些方法应该对您有用。谢谢。

请您参考如下方法:

[] 表示列表,() 表示元组(不可变列表),{} 表示字典(即 map )。

考虑:

(8, 
 {(2, 1): (1315840806, 
'\x14\x00&#nNWH\x00\x00\x06\x90\xb3\x00\... lostsa bytes), 

在顶层,这是一个元组:

  • 第一个元素是标量 8。
  • 第二个元素是一个字典,我们只看到其中第一个条目的一部分:
    • 条目的键是元组(2, 1)。
    • 该条目的值也是一个元组;它以 1315840806 开头,后跟一个包含二进制数据的字符串。

希望你明白了。