Python 如何正确替换文本文件的内容

Python 如何正确替换文本文件的内容,python,beautifulsoup,Python,Beautifulsoup,我正在尝试制作此网站的脱机副本:。此任务的一部分是下载所有使用BeautifulSoup引用的css/js,并修改此新下载资源的任何外部链接 目前我只使用stringreplace方法。但我不认为这是有效的,因为我在循环中这样做,下面的片段: local_content = '' for res in soup.findAll('link', {'rel': 'stylesheet'}): if not str(res['href']).startswith('data

我正在尝试制作此网站的脱机副本:。此任务的一部分是下载所有使用BeautifulSoup引用的css/js,并修改此新下载资源的任何外部链接

目前我只使用string
replace
方法。但我不认为这是有效的,因为我在循环中这样做,下面的片段:

local_content = '' 
for res in soup.findAll('link', {'rel': 'stylesheet'}):
            if not str(res['href']).startswith('data:'):
                original_res = res['href']
                res['href'] = some_function_to_download_css()
                local_content = local_content.replace(original_res, res['href'])
我只为以
数据:
开头的非嵌入资源保存资源。但问题是,
local\u content=local\u content.replace(original\u res,res['href'])
可能会导致我只能将一个外部资源修改为本地资源的问题。其余的仍然是指资源的在线版本

我猜,因为local_内容是一个很长的字符串(看看ieeghn的源代码),所以这个结果不太好

如何正确地替换给定模式的字符串内容? 或者我必须先将其存储到一个文件中并在那里修改它吗

已编辑 我发现问题出在这行代码中:

 original_res = res['href']

BSoup将以某种方式清理href字符串。就我而言,
&将更改为
&
。当我试图将原始的
href
替换为新下载的本地文件时,
str.replace()
根本找不到这个原始值。要么我必须找到一种方法来使用original HREF,要么就是简单地处理这个案例。不得不说,拥有原始HREF是最好的方式

您已经在替换内容,某种程度上

res['href'] = some_function_to_download_css()
…在BeautifulSoup的HTML树表示中更新
href
节点的
res
属性

为了提高效率,您可以缓存已经下载的CSS文件的URL,并在下载文件之前查阅缓存。完成后(如果您对BS的属性排序/缩进等没问题),可以使用
str(soup)
获得树的字符串表示形式


参考资料:

您能提供几乎完整的代码吗?这样我就可以看一看……事实上,我已经做到了,并且意识到了这一点。只是。。以某种方式用于长字符串(HTML内容)。本地内容不会改变。我想我会发布一个完整的代码,可以测试。它还可能帮助我找到bugHi@PlasmaSaunda:我编辑了我的问题。有什么建议吗?@swdev您尝试过HTMLPasser类的
unescape
方法吗?