Python - 使用偏移和结构读取二进制文件

时间:2013-09-23 08:15:22

标签: python struct binaryfiles binary-data

我最近重新开始编程并决定作为一个让我前进和激励的项目我将为后果2编写一个字符编辑器。我遇到的问题是在前几个字符串后我不能似乎使用文件偏移量或结构来提取我需要的数据。

这就是我在做的事情。 我正在使用的文件是www.retro-gaming-world.com/SAVE.DAT

import struct
savefile = open('SAVE.DAT', 'rb')
try:
        test = savefile.read()
finally:
        savefile.close()

print 'Header: ' +  test[0x00:0x18] # returns the save files header description "'FALLOUT SAVE FILE '"
print "Character Name: " + test[0x1D:0x20+4] Returns the characters name "f1nk"
print "Save game name: " + test[0x3D:0x1E+4] # isn't returning the save name "church" like expected
print "Experience: " + str(struct.unpack('>h', test[0x08:0x04])[0]) # is expected to return the current experience but gives the follosing error

输出:

Header: FALLOUT SAVE FILE
Character Name: f1nk
Save game name: 
    Traceback (most recent call last):
        File "test", line 11, in <module>
        print "Experience: " + str(struct.unpack('>h', test[0x08:0x04])[0])
    struct.error: unpack requires a string argument of length 2

我已经确认了抵消,但它并没有像预期的那样返回任何东西。

1 个答案:

答案 0 :(得分:0)

test[0x08:0x04]是一个空字符串,因为结束索引小于起始索引。

例如,test[0x08:0x0A]会根据h代码的要求为您提供两个字节。

字符串切片的语法是s[start:end]s[start:end:step]Link to docs