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

标签 python json python-3.x configuration-files

出于配置目的,如果我在 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/

相关文章:

python - Python 函数中 Print 和 Return 的不同输出

python - 小图像上的OpenCv ssize.area()> 0错误

php - 使用两个 mySQL 查询来创建嵌套的 JSON 数组

python - 有没有更好的方法将字典转换为 [k1,v1,k2,va]?

python-3.x - 如何修复 : PyInstaller in MSYS2 MinGW 'Your platform is not yet supported'

python - Python 3 中的不可变字典 : how to make keys(), items() 和 values() 字典 View 不可变

python - Tensorflow ctc_loss_calculator : No valid path found

javascript - 哪些浏览器支持 HTTP/2 的流量控制功能?

php - 将 JSON 代码附加到从 MySQL 和 PHP 创建的 JSON

python - Numpy 将列表附加到数组而不合并它们