Python:合适的配置文件格式
我想使用一种配置文件格式,这种格式支持键值对和可以嵌套、重复的结构,而且语法尽量简单。我想要的格式大概是这样的:
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列表,我觉得这样用起来有点别扭。
5 个回答
1
我觉得你可以看看 libconfig 这个库,地址是 http://www.hyperrealm.com/libconfig/。那里应该有适合 Python 的接口。
另外一个解决办法是使用 JSON 格式,这个格式 Python 自带就有。你可以查一下关于 JSON 模块的文档。
10
由于Python自带的configparser
模块似乎不支持嵌套部分,我建议你可以先试试ConfigObj。你可以在这里找到一个入门教程。根据它的主页,这里有一些值得注意的功能:
- 支持嵌套部分(子部分),可以嵌套到任何层级
- 可以使用列表值
- 支持多行值
- 字符串插值(替换)
- 集成了强大的验证系统
- 包括自动类型检查/转换
- 支持重复部分
- 允许设置默认值
- 在写出配置文件时,ConfigObj会保留所有注释以及成员和部分的顺序
- 提供了许多有用的方法和选项来处理配置文件(比如'reload'方法)
- 完全支持Unicode
ConfigObj被Bazaar、Trac、IPython、matplotlib以及许多其他大型Python项目使用,所以我觉得它相当成熟和稳定(虽然我自己从未使用过)。
13
我觉得YAML在这个情况下非常好用:
jobs:
- name: my-media
...
- name: something else
...
或者,你也可以用字典来代替列表:
jobs:
my-media:
frequency: 1 day
...
something-else:
frequency: 2 day
...
还有一个你可能没考虑到的点,就是可以用Python代码来做配置。你可以把Python的字典和列表嵌套在一起,这样看起来非常清晰,而且还有很多意想不到的好处。比如,Django就是用Python代码来写它的设置文件的。