python - ConfigObj/ConfigParser 与为 Python 设置文件使用 YAML

标签 python settings configuration-files yaml configparser

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

最佳答案

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

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

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

  • 如果您想要具有包含映射/字典的未命名元素列表的复杂结构,那么 ConfigParserConfigObj 将无法帮助您作为 INI 文件键值对必须进入部分,列表只能是值。

ruamel.yaml YAML 阅读器的实现支持上述所有 ¹。很长一段时间以来,我一直使用fuzzyman 出色的ConfigObj 来保存往返评论,以及使用PyYAML 来处理更复杂的结构,这结合了两全其美。 ruamel.yaml 包含 yaml 实用程序,可以将 ConfigObj INI 文件转换为 YAML


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

关于python - ConfigObj/ConfigParser 与为 Python 设置文件使用 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444436/

相关文章:

python - 未知服务错误 botocore

python - 按频率排序列表

Oracle 设置每个用户的默认方案(不改变 session )

hadoop - fs.defaultFS 和 fs.default.name 的区别

c# - 在运行时更改 App.config

python - 如何使用 Python 从网络浏览器获取 cookie?

python - wxPython 的 wx.ListCtrl 处于简单列表模式(不是 style = wx.LC_REPORT)

c# - 当我更改设置的漫游属性时,如何保留用户设置的值?

Qt4 QSettings 保存枚举值(例如Qt::CheckState)

android - 如何在 Eclipse 中配置 ORMLite 表配置文件?