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

Posted

技术标签:

【中文标题】python re模块替换文本文件中的二进制数据?【英文标题】:python re module to replace the binary data inside a text file? 【发布时间】:2011-10-01 01:35:36 【问题描述】:

我知道混合文本和二进制很糟糕,但我必须这样做。

我想用字符串“XXXXXXXX”替换二进制内容,即“Content-Type: image”和“----”周围的内容

所以测试的代码是:

# 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,但我仍然找不到答案。

【问题讨论】:

为什么不使用 Python 的多部分 MIME 功能? 由于某种原因,我必须从mysql数据库中提取一些产品信息,然后构造一个SOAP请求并使用python的suds库将此SOAP请求发送到远程服务器。但部分信息提取是结合二进制数据和文本数据 这并不能真正回答我的问题。 对不起,我是 python 新手,之前从未听说过 Python 的 multipart MIME。感谢您的建议,我会尝试谷歌了解更多详细信息。 【参考方案1】:

这对我有用:

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

基本上它以贪婪的方式匹配Content-Type: image----- 之间的所有字符。 0 表示“匹配此模式的所有出现”。可能这对您来说是多余的,但您不能跳过它,因为您还想使用标志 re.DOTALL 来修改“任何字符”的含义以包含换行符。

HTH!

【讨论】:

以上是关于python re模块替换文本文件中的二进制数据?的主要内容,如果未能解决你的问题,请参考以下文章

Python正则(Re模块)

Python数据分析学习-re正则表达式模块

Python re模块与正则表达式详解

罗列Python标准模块

一文秒懂python正则表达式常用函数

python re 与 re.sub替换部分文件