使用用户提供的值替换HTML文件中的文本的Python脚本

时间:2015-10-24 22:42:31

标签: python html python-2.7 substitution

我有一个hmtl文件,如下所示:

...
<!-- Special_ID -->
<p> stuff1 </p>
<p> stuff2 </p>
<!-- /Special_ID -->
...

我有一个INI文件:

[general]
param=stuff1
 stuff2

如果用户编辑文件并将param值更改为test,我希望将html文件更改为:

...
<!-- Special_ID -->
<p> test </p>
<!-- /Special_ID -->
...

目前,我正在做的是解析INI文件(Python的ConfigParser),然后将部分(“general”)和选项(“param”)转换为一个开始和停止特殊ID,就像在上面的例子。

然后:

while we haven't found the start id:
    just write a line to some temporary file

write our start id to the temp file
write out new value ("test") to the temp file # surround with <p>

loop through original file until we find the stop id
then write the stop id and the rest of the file to temp

replace original file with tmp file

有更聪明的方法吗?

也许是已经完成此操作的Python模块。

我也不是特别喜欢要求<!-- Special_ID -->,但我没有使用网页框架(只是一个简单的应用程序),所以我不能只是做一个花哨的<p py:for ...>...喜欢TurboGears中。

1 个答案:

答案 0 :(得分:1)

总体上不确定您提供的当前方法,但以下是如何在特定注释后替换所有p元素并改为插入新的p元素(使用{{1 HTML解析器)。我的想法是:

工作代码:

p

打印:

from bs4 import BeautifulSoup, Comment

data = """
<!-- Special_ID -->
<p> stuff1 </p>
<p> stuff2 </p>
<!-- /Special_ID -->
"""
soup = BeautifulSoup(data, "html.parser")

# find "Special_ID" comment
special_id = soup.find(text=lambda text: isinstance(text, Comment) and "Special_ID" in text)

# find all sibling "p" elements
for p in special_id.find_next_siblings("p"):
    p.extract()

# create new "p" element
tag = soup.new_tag("p")
tag.string = "test"

# insert the new "p" element after the comment
special_id.insert_after(tag)

print(soup.prettify())