Skip to main content
 首页 » 编程设计

python之在外部文件中存储字典、正则表达式和变量的最佳方式

2024年08月14日37Leo_wl

出于配置目的,如果我在 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 文件,或者,使用新的正则表达式加载-更新-转储文件。