python将读取文件中的字符串方法替换为二进制

时间:2016-02-07 23:56:16

标签: python binary

我以readbinary(“rb”)模式打开了一个图像文件,并将数据存储在一个变量中。现在我想用我的值替换二进制文件中的一些值..但它不能使用字符串

的常用替换方法
f=open("a.jpg","rb")
a=f.read()

''' first line is '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe1\x00*Exif\x00\x00II*\x00\x08\x00\x00\x00\x0 '''

a=a.replace("ff","z")
print a

#but there's no change in a

任何人都可以告诉我哪里出错了..我也试过了

a=a.replace(b'ff',b'z')

但输出仍未改变。

任何人都可以告诉我应该做什么来进行替换吗?

2 个答案:

答案 0 :(得分:1)

我不知道你正在使用哪个版本的Python(这种操作在2和3之间有所不同),但在执行replace方法之前尝试a = str(a)

编辑:对于python 2.7,我发现做你想做的只是合理的方法是使用内置函数repr。例如:

>>> picture = open("some_picture.jpg", 'rb')
>>> first_line = picture.readline()
>>> first_line
'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe1\x00*Exif\x00\x00II*\x00\x08\x00\x00\x00\x01\x001\x01\x02\x00\x07\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00Google\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n'
>>> repr(first_line)
>>> "'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xe1\\x00*Exif\\x00\\x00II*\\x00\\x08\\x00\\x00\\x00\\x01\\x001\\x01\\x02\\x00\\x07\\x00\\x00\\x00\\x1a\\x00\\x00\\x00\\x00\\x00\\x00\\x00Google\\x00\\x00\\xff\\xdb\\x00\\x84\\x00\\x03\\x02\\x02\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x04\\x03\\x03\\x04\\x05\\x08\\x05\\x05\\x04\\x04\\x05\\n'"
>>> repr(first_line).replace('ff', 'SOME_OTHER_STRING')
"'\\xSOME_OTHER_STRING\\xd8\\xSOME_OTHER_STRING\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xSOME_OTHER_STRING\\xe1\\x00*Exif\\x00\\x00II*\\x00\\x08\\x00\\x00\\x00\\x01\\x001\\x01\\x02\\x00\\x07\\x00\\x00\\x00\\x1a\\x00\\x00\\x00\\x00\\x00\\x00\\x00Google\\x00\\x00\\xSOME_OTHER_STRING\\xdb\\x00\\x84\\x00\\x03\\x02\\x02\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x04\\x03\\x03\\x04\\x05\\x08\\x05\\x05\\x04\\x04\\x05\\n'"

答案 1 :(得分:0)

在Python控制台上显示字符串时,字符串会被编码,以便您可以看到所有字符,甚至是那些不可打印的字符。每当您看到\xff之类的内容时,不是4个字符,它就是十六进制表示法中的单个字符。要替换它,您还需要指定相同的单个字符。

a = a.replace("\xff", "z")