Apo*_*oad 22 python settings yaml configuration-files configparser
哪个更适合为Python程序,内置模块(ConfigParser)或独立项目(ConfigObj)创建设置文件,还是使用YAML数据序列化格式?我听说ConfigObj比ConfigParser更容易使用,即使它不是内置库.我还读到PyYAML很容易使用,虽然YAML需要一些时间来使用.除了易于实现,这是创建设置/配置文件的最佳选择?
使用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)
它会自动为您处理列表值,并允许多行值.如果您修改配置文件,则可以在保留订单和注释的同时将其写回.
有关更多信息,请参阅这些文章,包括类型验证的示例:
这取决于您要在配置文件中存储的内容以及如何使用它们
如果您进行圆形跳闸(yaml→code→yaml)并希望保留注释,则无法使用PyYAML
或ConfigParser
.
如果您想保留密钥的顺序(例如,当您签入配置文件时),PyYAML
除非您指定!!omap
(这使得更新比普通映射更不容易), 所以不会这样做
如果你想拥有包含映射/字典的未命名元素列表的复杂结构,那么因为INI文件键值对必须进入部分而列表只能是值ConfigParser
,ConfigObj
因此无法帮助你.
ruamel.yaml
YAML阅读器的实现支持上述所有¹.我已经使用了fuzzyman优秀的ConfigObj来保存往返评论很长一段时间,以及PyYAML用于更复杂的结构,这结合了两者的优点.ruamel.yaml
包括yaml
可以将ConfigObj
INI文件转换为YAML 的实用程序
¹ ruamel.yaml是支持YAML 1.2 YAML库(我建议使用,但后来我的包的作者).PyYAML仅支持(大部分)YAML 1.1.
ConfigParser有一个非常糟糕的API,ConfigObj应该是好的,但我从来没有使用它,对于ini文件我通常实现自己的解析器.
但是,类似ini的格式无论如何都不能很好地处理不同的类型,序列或递归映射,因此我只使用yaml.使用编辑器很容易阅读和编辑,有一个解析这些文件的标准,你没有提到的类似ini的格式.
归档时间: |
|
查看次数: |
9659 次 |
最近记录: |