首页 > 解决方案 > 使用 Python File IO 在 HTML 文件的特定位置添加文本

问题描述

我目前有一个 HTML 文件,其中包含在单击时运行脚本的单词。我想要在点击时做的是在行中插入一些文本。下面是我想要发生的事情的一个例子。

我想从这个...

<!DOCTYPE html>
<html>

<body>
<p>
A whole bunch of words yada yada yada
<a href="#" onclick="pythonScript(/wiki/Mercury_poisoning)" title="Mercury poisoning">
 mercury poisoning
</a>
more words yada yada yada
</p>
</body>
</html>

对此...

    <!DOCTYPE html>
    <html>

    <body>
    <p>
    A whole bunch of words yada yada yada
    <a href="#" onclick="pythonScript(/wiki/Mercury_poisoning)" title="Mercury poisoning">
     mercury poisoning
    </a>
    </p>
    <p> Text that comes from pythonScript
    </p>
    <p>
    more words yada yada yada
    </p>
    </body>
    </html>

请注意,来自 python 脚本的文本已经是 html 格式。我将如何使用 Python File IO 做到这一点?如果使用其他工具更容易,那么解决这个问题最简单的工具是什么?

我尝试使用 write 功能,但覆盖了整个文件。然后我尝试以附加模式编写,但仍然没有将文本放在我想要的位置。我的第三个想法是以 r+ 模式打开文件并阅读直到我单击的单词,但我不知道如何确保程序将到达正确的字符串,而不是字符串的第一个实例。

标签: pythonhtmlfile-iobeautifulsoup

解决方案


如果您只想使用 Python 标准库来执行此操作,则以下代码片段应该可以工作。

initial_code = '''
<!DOCTYPE html>
<html>

<body>
<p>
A whole bunch of words yada yada yada
<a href="#" onclick="pythonScript(/wiki/Mercury_poisoning)" title="Mercury poisoning">
 mercury poisoning
</a>
more words yada yada yada
</p>
</body>
</html>
'''

additional_code = '''
    <p> Text that comes from pythonScript
    </p>
'''

elements = initial_code.split("more words yada yada yada")

new_file = elements[0] + additional_code + elements [1]

但是,这不是一个很好的通用解决方案。根据您希望脚本执行的操作,使用Jinja2等模板库构建 HTML 页面可能更合适。Miguel Grinberg 有一个关于在 Flask 应用程序中使用 Jinja2 的精彩教程,并介绍了模板的概念。


推荐阅读