繁体   English   中英

Python:体面的配置文件格式

[英]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会保留所有注释以及成员和部分的顺序
  • 使用配置文件的许多有用方法和选项(如'reload'方法)
  • 完整的Unicode支持

ConfigObj被Bazaar,Trac,IPython,matplotlib和许多其他大型Python项目使用,所以它看起来非常成熟和稳定(虽然我自己从未使用它)。

我想你应该检查libconfig库http://www.hyperrealm.com/libconfig/ 应该有一些python绑定。

另一个解决方案是使用已经由python本身提供的json格式。 搜索JSON模块的文档。

为什么重新发明轮子? 你可以利用:

http://docs.python.org/library/configparser.html

如果您的需求超出其他选项,您也可以考虑使用Jsonnet Jsonnet是JSON的扩展,乍一看增加了注释,放宽了逗号规则,并且不再需要这么多引用。 但是如果你看得更深,你会发现它确实提供了一个完整的函数式编程语言,并且通过mixins,文件导入等支持模板扩展。它有一个Python绑定,但它的实际实现是C ++。

你可以使用red-dove的配置系统。

http://www.red-dove.com/config-doc/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM