2016-02-07 49 views
1

我以readbinary(「rb」)模式打開一個圖像文件並將數據存儲在一個變量中。現在我想用我的價值觀,以取代在二進制一些值..但使用通常的替換字符串的方法,它不工作python替換讀取文件中的字符串方法爲二進制

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 

誰能告訴IAM哪裏去錯了..我也嘗試

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

但仍然輸出不變。

任何人都可以告訴我應該做什麼來執行更換?

回答

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'" 
+0

即時通訊使用python 2.7 ..我試過str(a)。它不工作 –

+0

@sidharthkumar我不知道你是否收到關於答案變化的通知,所以請檢查我的最新版本。 – erhesto

0

當顯示在控制檯的Python的字符串,字符串編碼,這樣就可以看到所有的字符,甚至是不可打印的人。只要你看到類似\xff的東西,那不是4個字符,它是一個單個字符(十六進制表示法)。要替換它,您還需要指定相同的單個字符。

a = a.replace("\xff", "z") 
相關問題