2012-02-10 66 views
2

在存储在.dat文件中的MMO游戏用户帐户统计信息中。我知道这是python泡菜。 林在PY不是专业的(我真的不知道该语)所有的话,我可以写需要帮助才能从pickle中提取二进制数据

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) 

等等...

我不知道如何让巨蟒字节代码,什么王的数据是

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

对象?阵列?如何迭代它。以及我如何将数据保存为二进制字符串来分析它?代码示例是值得赞赏的,但有些方法可以继续前进。感谢名单。

回答

1

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

考虑:

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

在顶层,这是一个元组:

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

希望你的想法。

+0

谢谢,我的好开始 – mrsombre 2012-02-10 12:19:46

+0

再次感谢,我明白了! – mrsombre 2012-02-10 13:59:12

+0

@DmitryBarsukov:不客气! – NPE 2012-02-10 14:00:15