如何使用Python将文件中的值替换为RegEx在文件中找到的值?

假设文件系统中有一个文件,其中包含用$预先填充的值.

例如

<ul>
    <li>Name: $name01</li>
    <li>Age: $age01</li>
</ul>

能够通过RegEx获取值:

#!/usr/bin/env python 
import re

with open("person.html", "r") as html_file:
    data=html_file.read()   
list_of_strings = re.findall(r'\$[A-Za-z]+[A-Za-z0-9]*', data)
print list_of_strings

这会将值打印到列表中:

[$name01, $age01]

现在,我将一个JSON示例有效负载发送到我的web.py服务器,如下所示:

curl -H "Content-Type: application/json" -X POST -d '{"name":"Joe", "age":"25"}' http://localhost:8080/myservice

我能够像这样获得这些值:

import re
import web
import json

urls = (
    '/myservice', 'Index',
)

class Index:
    def POST(self):
        data = json.loads(web.data())

        # Obtain JSON values based on specific keys
        name = data["name"]
        age = data["age"]

问题:

>如何迭代地从有效负载中获取JSON值并将它们放入列表中(而不是通过键名手动获取它们)?
>一旦我有了这个列表,我怎么能用列表中的JSON值替换HTML文件中的值?

例如

如何在HTML文件中手动插入这些项目(根据上面定义的RegEx exp):

用名称替换$name01?

<ul>
    <li>Name: Joe</li>
    <li>Age: 25</li>
</ul>

最佳答案 这是我的方式(也许这是一个更好的方法):

import re
import json

html = """
<ul>
    <li>Name: $name01</li>
    <li>Age: $age01</li>
</ul>"""

JSON = '{"name01":"Joe", "age01":"25"}'
data = json.loads(JSON)

html = re.sub(r'\$(\w+)', lambda m: data[m.group(1)], html)

print(html)

输出:

<ul>
    <li>Name: Joe</li>
    <li>Age: 25</li>
</ul>

顺便说一句,我更喜欢使用像Jinja2这样的模板.由于我不知道web.py,所以我不能举一个例子.但我找到了文件:http://webpy.org/docs/0.3/templetor

点赞