出于配置目的,如果我在 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))
而且错误通常是相同的,将我的在线搜索指向一个事实,即 regular expressions should not be stored in JSON文件。
json.decoder.JSONDecodeError: Invalid \escape: line 22 column 38 (char 801)
YAML 文件似乎有 similar limitations ,所以我想我不应该那样下去。
现在,我将我的表达式存储在一个单独文件的字典中:
mydict = {"allow": "com\/[a-z]+(?:-[a-z]+)*\?skid\="}
并从我的程序文件加载它:
exec(compile(source=open('expr.py').read(), filename='expr.py', mode='exec'))
print(mydict)
哪个有效并且对我来说没问题 - 但它看起来有点......特别......带有 exec 和 compile。
有什么理由不这样做呢? 有没有更好的方法在我可以在我的程序代码中打开/使用的外部文件中存储复杂的数据结构和正则表达式?
最佳答案
您指定的链接是 JSON 规范。据我所知,它没有说明正则表达式。
您似乎在做的是采用有效的正则表达式并将其粘贴到您的 JSON 文件中以供(重新)使用。这并不总是有效,因为必须对某些内容进行转义才能使 JSON 有效。
然而,有一种简单的方法可以将正则表达式插入到 JSON 文件中,使用适当的转义符,方法是制作一个将正则表达式作为命令行参数的小型 Python 程序,然后 json.dump()
JSON 文件,或者,使用新的正则表达式加载-更新-转储文件。
关于python - 在外部文件中存储字典、正则表达式和变量的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388734/