python二进制文件操作

python二进制文件操作,python,types,binaryfiles,Python,Types,Binaryfiles,我在python中使用二进制文件时遇到问题 以下是我想做的: 我有一个二进制文件,我想在其中修改另一个序列 替换顺序为“ASBF”。 我想用一个数字来代替它 当我使用Python2.7时,它工作得很好。 但现在在Python3.3中,字节和str之间存在差异,我认为这是我的问题 以下是我正在执行的代码: #that is the number I want to put instead of the hexa sequence number = 1703518678 #I put it in

我在python中使用二进制文件时遇到问题

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

替换顺序为“ASBF”。 我想用一个数字来代替它

当我使用Python2.7时,它工作得很好。 但现在在Python3.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()
我尝试了其他方法来解决这个问题,但我不知道如何用二进制文件中的另一个序列替换一个序列。 我想41534246,在六边形中是“ASBF”,变成6589A1D6,在六边形中是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:应为字节、字节数组或与缓冲区兼容的对象

我真的不明白如何度过这一关

EDIT2: 我遇到的问题是我打开文件的方式。
现在我使用with而不是open,我的程序运行得很好。

可以在python 3中使用字节字符串,方法是指定它们,如
b'this'
。FWIW,您应该使用来处理文件。
“ASBF”
不是有效的十六进制字符串。您正在寻找由这些ASCII字符表示的bytestring吗?顺便说一句,您可以让
结构
执行当前正在使用
数字数组
执行的工作。试试
struct.pack(“@Blckknght是的,这就是我想要做的。谢谢你的struct功能