ConfigObj/ConfigParser与使用YAML进行Python设置fi

2024-04-16 00:55:05 发布

您现在位置:Python中文网/ 问答频道 /正文

哪个更适合为Python程序、内置模块(ConfigParser)或独立项目(ConfigObj)创建设置文件,或者使用YAML数据序列化格式?我听说ConfigObj比ConfigParser更容易使用,尽管它不是一个内置库。我也读过PyYAML很容易使用,尽管YAML需要一点时间来使用。除了易于实现之外,创建设置/配置文件的最佳选择是什么?


Tags: 模块文件数据项目程序yaml序列化格式
3条回答

这取决于您想在配置文件中存储什么以及如何使用它们

  • 如果执行往返(yaml→code→yaml)并希望保留注释,则不能使用PyYAMLConfigParser

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

  • 如果您希望拥有包含映射/字典的未命名元素列表的复杂结构,那么ConfigParserConfigObj将不会有帮助,因为INI文件的键值对必须进入节,并且列表只能是值。

YAML读取器的^{}实现支持上述所有情况。我使用fuzzyman的优秀ConfigObj进行了很长一段时间的往返评论保存,同时使用PyYAML进行更复杂的结构,这将两者结合得最好。ruamel.yaml包括可以将yamlINI文件转换为YAML的ConfigObj实用程序


1ruamel.yaml是一个支持yaml 1.2的yaml库(我建议使用这个库,但我是这个包的作者)。PyYAML仅支持(大多数)YAML 1.1。

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

然而,类似ini的格式不能很好地处理不同的类型、序列或递归映射,所以我只使用yaml。使用编辑器很容易阅读和编辑,有一个解析这些文件的标准,而且没有任何像ini格式那样的缺点。

使用ConfigObj至少非常简单,general中的ini文件比YAML简单得多(而且使用得更广泛)。对于更复杂的情况,包括验证、默认值和类型,ConfigObj提供了一种通过configspec验证的方法。

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

from configobj import ConfigObj

conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']

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

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

相关问题 更多 >