【发布时间】:2019-06-20 16:09:11
【问题描述】:
出于配置目的,如果我将“简单”的正则表达式存储在 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。
有什么理由不这样做吗? 有没有更好的方法将复杂的数据结构和正则表达式存储在我可以在我的程序代码中打开/使用的外部文件中?
【问题讨论】:
-
考虑使用 Python 的
pickle模块。另见Making object JSON serializable with regular encoder。 -
请注意,您应该为正则表达式使用
r字符串前缀(不这样做实际上可能是一些存储问题的原因)。
标签: python json python-3.x configuration-files