用python re模块替换文本文件中的二进制数据?

1 投票
1 回答
1395 浏览
提问于 2025-04-16 21:05

我知道把文本和二进制混在一起是很糟糕的做法,但我必须这么做。

我想把那些在“Content-Type: image”和“----”之间的二进制内容替换成字符串“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,但还是找不到解决办法。

1 个回答

1

这个对我有效:

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

基本上,它以贪婪的方式匹配所有在 Content-Type: image----- 之间的字符。这里的0表示“匹配这个模式的所有出现”。对你来说,这可能有点多余,但你不能省略它,因为你还想使用 re.DOTALL 这个标志,它会改变“任何字符”的意思,让它也包括换行符。

希望这对你有帮助!

撰写回答