首页 > 解决方案 > 在外部文件中存储字典、正则表达式和变量的最佳方式?

问题描述

出于配置目的,如果我将一个“简单”的正则表达式存储在一个JSON文件中并将其加载到我的 Python 程序中,它就可以正常工作。

{
    "allow": ["\/word\/.*"],
    "follow": true
},

如果我在 JSON 文件中存储更复杂的正则表达式,相同的 Python 程序会失败。

{
    "allow": ["dcp\=[0-9]+\&dppp\="],
    "follow": true
},

这是加载我的 JSON 文件的代码:

src_json = kw.get('src_json') or 'sources/sample.json'
self.MY_SETTINGS = json.load(open(src_json))

并且错误通常是相同的,将我的在线搜索指向一个事实,即正则表达式不应存储在 JSON文件中。

json.decoder.JSONDecodeError: Invalid \escape: line 22 column 38 (char 801)

YAML 文件似乎有类似的限制,所以我猜我不应该这样下去。

现在,我已经将我的表达式存储在一个单独的文件中的字典中:

mydict = {"allow": "com\/[a-z]+(?:-[a-z]+)*\?skid\="}

并从我的程序文件中加载它:

exec(compile(source=open('expr.py').read(), filename='expr.py', mode='exec'))

print(mydict)

哪个对我有用,对我来说没问题 - 但它看起来有点……特别……带有 exec 和 compile。

有什么理由不这样做吗?有没有更好的方法将复杂的数据结构和正则表达式存储在我可以在我的程序代码中打开/使用的外部文件中?

标签: pythonjsonpython-3.xconfiguration-files

解决方案


您指示的链接是 JSON 规范。据我所知,它没有说任何关于正则表达式的内容。

您似乎正在做的是采用一个有效的正则表达式并将其粘贴到您的 JSON 文件中以供(重新)使用。这并不总是有效,因为必须对某些内容进行转义才能使 JSON 有效。

然而,有一种简单的方法可以将正则表达式插入 JSON 文件,并使用适当的转义符,方法是制作一个小型 Python 程序,将正则表达式作为命令行参数,然后json.dump()是 JSON 文件,或者加载更新- 使用新的正则表达式转储文件。


推荐阅读