2011-07-08 35 views
1

我知道混合文本和二進制文件很糟糕,但我必須這樣做。python re模塊替換文本文件中的二進制數據?

我想替換二進制內容,這是與周圍的「內容類型:圖像」的字符串「XXXXXXXX」

和「----」,所以對於測試的代碼是:

# coding=utf-8 
import re 
raw_data = open('r_img.txt').read() 
#data = re.sub(r"Content-Type: image.*?-----","Content-Type: imageXXXXXXX-----", raw_data, re.S) 
data = re.sub(r"Content-Type: image[^-]*-----","Content-Type: imageXXXXXXX-----", raw_data, re.S) 
print data 

和文件r_img.txt是:

Content-Disposition: form-data; name="commodity_pic1"; filename="C:\Documents and Settings\tim\My Documents\My Pictures\Pic\222A8888.jpg" 

Content-Type: image/pjpeg 



EEE? JFIF H H EEE C 

EEE C  

EEEWhfEEE[e?EEEEEEqEEEEEEEEEEEEEEEZIOEEE(r5?-iEEEEEEEEEEEEEEE?EEE?EEEEEE 
-----------------------------7db27132d0198 

我曾嘗試與string.replace()和應用re.sub,但我仍然不能找到答案。

+0

爲什麼你不使用Python的多部分MIME功能? –

+0

出於某種原因,我必須從mysql數據庫中提取一些產品信息,然後構造一個SOAP請求並使用python的suds庫將此SOAP請求發送到遠程服務器。 但是,一些信息提取與二進制數據和文本數據結合起來 – pvd

+1

這並沒有真正回答我的問題。 –

回答

1

這個工作對我來說:

data = re.sub(r"Content-Type: image.*-----","Content-Type: imageXXXXXXX-----", 
       raw_data, 0, re.DOTALL) 

本質上講,它在一個貪婪的匹配方式Content-Type: image-----之間的所有字符。 0意味着「匹配所有這種模式」。也許這對你來說是多餘的,但是你不能跳過它,因爲你也想用標記re.DOTALL來修改「任何字符」的含義以包含換行符。

HTH!