ConfigObj/ConfigParser与使用YAML for Python设置文件

Apo*_*oad 22 python settings yaml configuration-files configparser

哪个更适合为Python程序,内置模块(ConfigParser)或独立项目(ConfigObj)创建设置文件,还是使用YAML数据序列化格式?我听说ConfigObj比ConfigParser更容易使用,即使它不是内置库.我还读到PyYAML很容易使用,虽然YAML需要一些时间来使用.除了易于实现,这是创建设置/配置文件的最佳选择?

fuz*_*man 9

使用ConfigObj至少非常简单,并且ini文件通常比YAML更简单(并且使用更广泛).对于更复杂的情况,包括验证,默认值和类型,ConfigObj提供了一种通过configspec验证来实现此目的的方法.

使用ConfigObj读取ini文件的简单代码:

from configobj import ConfigObj

conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']
Run Code Online (Sandbox Code Playgroud)

它会自动为您处理列表值,并允许多行值.如果您修改配置文件,则可以在保留订单和注释的同时将其写回.

有关更多信息,请参阅这些文章,包括类型验证的示例:


Ant*_*hon 9

这取决于您要在配置文件中存储的内容以及如何使用它们

  • 如果您进行圆形跳闸(yaml→code→yaml)并希望保留注释,则无法使用PyYAMLConfigParser.

  • 如果您想保留密钥的顺序(例如,当您签入配置文件时),PyYAML除非您指定!!omap(这使得更新比普通映射更不容易), 所以不会这样做

  • 如果你想拥有包含映射/字典的未命名元素列表的复杂结构,那么因为INI文件键值对必须进入部分而列表只能是值ConfigParser,ConfigObj因此无法帮助你.

ruamel.yamlYAML阅读器的实现支持上述所有¹.我已经使用了fuzzyman优秀的ConfigObj来保存往返评论很长一段时间,以及PyYAML用于更复杂的结构,这结合了两者的优点.ruamel.yaml包括yaml可以将ConfigObjINI文件转换为YAML 的实用程序


¹ ruamel.yaml是支持YAML 1.2 YAML库(我建议使用,但后来我的包的作者).PyYAML仅支持(大部分)YAML 1.1.

  • 我错过了一个免责声明,即这篇文章的作者也是 `ruamel.yaml` 的作者。 (2认同)

Das*_*Ich 5

ConfigParser有一个非常糟糕的API,ConfigObj应该是好的,但我从来没有使用它,对于ini文件我通常实现自己的解析器.

但是,类似ini的格式无论如何都不能很好地处理不同的类型,序列或递归映射,因此我只使用yaml.使用编辑器很容易阅读和编辑,有一个解析这些文件的标准,你没有提到的类似ini的格式.

  • ConfigObj处理类型和序列很好:-) (3认同)