python二进制文件操作

时间:2014-09-29 12:53:03

标签: python types binaryfiles

我在使用python中的二进制文件时遇到了麻烦。

这是我想要做的: 我有一个二进制文件,我想在其中修改另一个序列。

要替换的序列是'ASBF'。 我想用一个数字代替它。

当我使用python 2.7时,它运行得很好。 但现在在python 3.3中,字节和str之间存在差异,我认为这是我的问题。

这是我正在做的代码:

#that is the number I want to put instead of the hexa sequence
number = 1703518678 
#I put it in an array
number_array = []   
number_array.append(number & 0xFF)
number_array.append(number >> 8 & 0xFF) 
number_array.append(number >> 16 & 0xFF)
number_array.append(number >> 24 & 0xFF)

f = open(fichier_bin, 'rb')
lines = f.readlines()
f.close()

f = open(fichier_bin, 'wb')
for line in lines:
    f.write(line.replace('ASBF', struct.pack('BBBB', number_array[0], number_array[1], number_array[2], number_array[3]))) #replace ASBF by the number
f.close()

我尝试了其他的方法解决问题,但我无法弄清楚如何在二进制文件中替换另一个序列。 我希望在hexa中为'ASBF'的41534246成为6589A1D6,在hexa中为1703518678。

修改

这是我得到的错误

f.write(ligne.replace('ASBF', struct.pack('BBBB', number_array[0], number_array[1], number_array[2], number_array[3]))) #replace ASBF by the number

TypeError:预期字节,bytearray或缓冲区兼容对象

我真的不明白如何解决这个问题。

EDIT2: 我得到的问题是我打开文件的方式。 现在我使用而不是仅仅打开,我的程序工作得很好。

0 个答案:

没有答案