【问题标题】:Get a piece of string and replace with other one?获取一段字符串并用另一个替换?
【发布时间】:2017-06-08 20:53:31
【问题描述】:

我正在寻找一种方法,将 HTML 文件中每行的“href”和“src”内容替换为其他字符串。所以,我需要替换这个:

<img src="images/file.png" alt="">

有了这个:

<img src="data:image/png;base64,PD94bWwgdmVyc2lvbj0i..." alt="">

其实我写了一个可以将文件转换为base64的函数。我需要搜索href/src,取他的文件路径内容,替换成base64版本的文件,但是不知道怎么做。

这里是文件转base64的函数:

def filetoB64 (fpath=None,raw=False):
    fstring = None
    fmime = None
    freturn = None

    if fpath is not None:
        if os.path.isfile(fpath):
            fmime = mimetypes.MimeTypes().guess_type(fpath)[0]

            if fmime in (filemimes['text'] + filemimes['image'] + filemimes['audio'] + filemimes['video']):
                with open(fpath,'rb') as f:
                    fcontent = f.read()
                    fstring = base64.encodestring(fcontent).replace('\n','')

                    if raw:
                        freturn = fstring
                    else:
                        freturn = ''.join(['data:',fmime,';base64,',fstring])
            else:
                freturn = fpath
        else:
            freturn = fpath

    return freturn

【问题讨论】:

    标签: python string replace base64


    【解决方案1】:

    我假设您将文件转换为 base64 的功能完全正常。

    如果要替换 HTML 代码中的某些标签,可以使用 regex,如下例所示:

    import re
    
    string = '<img src="images/file.png" href="http://wwww.linktoreplace.com", alt="">'
    
    to_replace = re.findall('(\w+)="(.*?)"', string)
    
    for k, v in to_replace:
        if k == 'src':
            string = re.sub(v, "src_replaced_by_this_string", string)
        if k == 'href':
            string = re.sub(v, "href_replaced_by_this_string", string)
    
    print(string)
    

    输出:

    <img src="src_replaced_by_this_string" href="href_replaced_by_this_string", alt="">
    

    否则,您可以使用BeautifulSoup,这是一个用于从 HTML 和 XML 文件中提取数据的 Python 库。

    【讨论】:

    • 哇,BeautifulSoup 比我预期的要好,我喜欢它。感谢您的帮助,BS是我需要的。 :-)
    • 不客气。如果您选择 BeautifulSoup,我建议您阅读他们的official documentation
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2021-04-30
    • 2019-05-14
    • 1970-01-01
    • 2011-04-06
    • 2017-01-28
    • 2017-03-07
    相关资源
    最近更新 更多