Python:体面的配置文件格式

mir*_*e2k 8 python configuration parsing config configuration-files

我想使用一种配置文件格式,它支持键值对和可嵌套的,可重复的结构,并且尽可能地使用语法.我想象的是:

cachedir = /var/cache
mail_to = me@example.org

job {
   name = my-media
   frequency = 1 day
   source {
      from = /home/michael/Images

   source { }
   source { }       
}

job { }
Run Code Online (Sandbox Code Playgroud)

我对使用重要空白的东西感到满意.

JSON需要太多明确的语法规则(引用,逗号等).YAML实际上非常好,但是需要将作业定义为YAML列表,我发现使用起来有些尴尬.

Eli*_*sky 13

我认为YAML非常适合这个目的,实际上:

jobs:
 - name: my-media
   ...

 - name: something else
   ...
Run Code Online (Sandbox Code Playgroud)

或者,作为dict而不是list:

jobs:
  my-media:
    frequency: 1 day
    ...
  something-else:
    frequency: 2 day
    ...
Run Code Online (Sandbox Code Playgroud)

您可能没有考虑的另一件事是使用Python源进行配置.您可以以非常易读的方式嵌套Python dicts和列表,并提供多种意想不到的好处.例如,Django将Python源用于其设置文件.


Tam*_*más 10

由于Python的内置configparser模块似乎不支持嵌套部分,我首先尝试使用ConfigObj.(请参阅此处的介绍性教程).根据其主页,这是一组值得一提的功能:

  • 嵌套部分(子部分),任何级别
  • 列出值
  • 多行值
  • 字符串插值(替换)
  • 与强大的验证系统集成
    • 包括自动类型检查/转换
    • 重复的部分
    • 并允许默认值
  • 在写出配置文件时,ConfigObj会保留所有注释以及成员和部分的顺序
  • 使用配置文件的许多有用方法和选项(如'reload'方法)
  • 完整的Unicode支持

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