[英]Python: Decent config file format
我想使用一种配置文件格式,它支持键值对和可嵌套的,可重复的结构,并且尽可能地使用语法。 我想象的是:
cachedir = /var/cache
mail_to = me@example.org
job {
name = my-media
frequency = 1 day
source {
from = /home/michael/Images
source { }
source { }
}
job { }
我对使用重要空白的东西感到满意。
JSON需要太多明确的语法规则(引用,逗号等)。 YAML实际上非常好,但是需要将作业定义为YAML列表,我发现使用起来有些尴尬。
我认为YAML非常适合这个目的,实际上:
jobs:
- name: my-media
...
- name: something else
...
或者,作为dict而不是list:
jobs:
my-media:
frequency: 1 day
...
something-else:
frequency: 2 day
...
您可能没有考虑的另一件事是使用Python源进行配置。 您可以以非常易读的方式嵌套Python dicts和列表,并提供多种意想不到的好处。 例如,Django将Python源用于其设置文件。
由于Python的内置configparser
模块似乎不支持嵌套部分,我首先尝试使用ConfigObj 。 (请参阅此处的介绍性教程)。 根据其主页,这是一组值得一提的功能:
ConfigObj被Bazaar,Trac,IPython,matplotlib和许多其他大型Python项目使用,所以它看起来非常成熟和稳定(虽然我自己从未使用它)。
我想你应该检查libconfig库http://www.hyperrealm.com/libconfig/ 。 应该有一些python绑定。
另一个解决方案是使用已经由python本身提供的json格式。 搜索JSON模块的文档。
为什么重新发明轮子? 你可以利用:
如果您的需求超出其他选项,您也可以考虑使用Jsonnet 。 Jsonnet是JSON的扩展,乍一看增加了注释,放宽了逗号规则,并且不再需要这么多引用。 但是如果你看得更深,你会发现它确实提供了一个完整的函数式编程语言,并且通过mixins,文件导入等支持模板扩展。它有一个Python绑定,但它的实际实现是C ++。
你可以使用red-dove的配置系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.