python - 在外部文件中存储字典、正则表达式和变量的最佳方式?
问题描述
出于配置目的,如果我将一个“简单”的正则表达式存储在一个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。
有什么理由不这样做吗?有没有更好的方法将复杂的数据结构和正则表达式存储在我可以在我的程序代码中打开/使用的外部文件中?
解决方案
您指示的链接是 JSON 规范。据我所知,它没有说任何关于正则表达式的内容。
您似乎正在做的是采用一个有效的正则表达式并将其粘贴到您的 JSON 文件中以供(重新)使用。这并不总是有效,因为必须对某些内容进行转义才能使 JSON 有效。
然而,有一种简单的方法可以将正则表达式插入 JSON 文件,并使用适当的转义符,方法是制作一个小型 Python 程序,将正则表达式作为命令行参数,然后json.dump()
是 JSON 文件,或者加载更新- 使用新的正则表达式转储文件。
推荐阅读
- php - 在 Symfony 中使用迁移时如何保持预先存在的表不变?
- .net - 对于 .NET Core 应用程序,“服务...启动”指令到底意味着什么?
- mariadb - MariaDB 为 ROW 类型的变量动态提取列
- uppaal - 找不到可能导致“由超出范围的分配或超出范围的数组查找引起”的原因。错误
- recursion - Rust 什么时候保证尾递归?
- machine-learning - na.fail.default 中的随机森林错误:对象中的缺失值
- user-experience - 专为专家设计的 UI 的技术术语是什么?
- python - 避免在导入的函数调用中传递(相同重复的)参数
- linux - 如何使用 Bash shell 重定向和附加?
- excel - 对于下一个子在 VBA 的列中返回相同的值?