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

Posted

技术标签:

【中文标题】如何将 JSON 中的值替换为 RegEx 在使用 Python 的文件中找到的值?【英文标题】:How to replace values from JSON with those found by RegEx in a file using Python? 【发布时间】:2016-02-22 09:11:41 【问题描述】:

假设文件系统中有一个文件包含带有$ 前缀的值。

例如

<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 值并将它们放入列表中(而不是通过键名手动获取它们)?

    获得此列表后,如何将 HTML 文件中的值替换为列表中的 JSON 值?

例如

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

将 $name01 替换为名称?

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

【问题讨论】:

【参考方案1】:

关凯文,

感谢您的解决方案,但不幸的是它不起作用。

这是我的工作方式(数据是 json 内容):

def replace_all(output_file, data):
    homedir = os.path.expanduser("~")
    contracts_dir = homedir + "/tmp"
    with open(output_file, "r") as my_file:
        contents = my_file.read()
    destination_file = contracts_dir + "/" + data["filename"]
    fp = open(destination_file, "w")
    for key, value in data.iteritems():
        contents = contents.replace("$" + str(key), value)
    fp.write(contents)
    fp.close()

【讨论】:

【参考方案2】:

这是我的方式(也许这里有更好的方式):

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

【讨论】:

以上是关于如何将 JSON 中的值替换为 RegEx 在使用 Python 的文件中找到的值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQ 替换 JSON 中的下划线

在 Oracle 中用 RegEx 替换列中的值

用于替换值的 REGEX 帮助

如何在 C# 中使用 Regex 将 [number] 替换为 number - 1?

如何使用Java replaceAll(regex,replacement)方法替换字符串中的所有方括号[重复]

如何根据另一个字典查找和替换一个字典中的值