我想使用一种配置文件格式,它支持键值对和可嵌套,可重复的结构,并且尽可能轻松地使用语法。我想象的是:
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列表,我觉得使用起来有些尴尬。
答案 0 :(得分:13)
我认为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源用于其设置文件。
答案 1 :(得分:10)
由于Python的内置configparser
模块似乎不支持嵌套部分,我首先尝试ConfigObj。 (参见介绍性教程here)。根据其主页,这是一组值得一提的功能:
ConfigObj,所以它看起来非常成熟和稳定(虽然我自己从未使用过它)。
答案 2 :(得分:2)
我认为您应该检查libconfig库http://www.hyperrealm.com/libconfig/。 应该有一些python绑定。
另一个解决方案是使用已经由python本身提供的json格式。搜索JSON模块的文档。
答案 3 :(得分:1)
为什么重新发明轮子?您可以使用:
答案 4 :(得分:0)
您可以使用red-dove的配置系统。
答案 5 :(得分:0)
如果您的需求超出其他选项,您也可以考虑Jsonnet。 Jsonnet是JSON的扩展,乍一看增加了注释,放宽了逗号规则,并且不再需要这么多引用。但是如果你看得更深,你会发现它确实提供了一个完整的函数式编程语言,并且通过mixins,文件导入等支持模板扩展。它有一个Python绑定,但它的实际实现是C ++。