2024-04-27 10:35:46 发布
网友
哪个更适合为Python程序、内置模块(ConfigParser)或独立项目(ConfigObj)创建设置文件,或者使用YAML数据序列化格式?我听说ConfigObj比ConfigParser更容易使用,尽管它不是一个内置库。我也读过PyYAML很容易使用,尽管YAML需要一点时间来使用。除了易于实现之外,创建设置/配置文件的最佳选择是什么?
这取决于您想在配置文件中存储什么以及如何使用它们
如果执行往返(yaml→code→yaml)并希望保留注释,则不能使用PyYAML或ConfigParser。
PyYAML
ConfigParser
如果您想保持密钥的顺序(例如,当您签入配置文件时),PyYAML不会这样做,除非您指定!!omap(这使得更新比普通映射更不容易)
!!omap
如果您希望拥有包含映射/字典的未命名元素列表的复杂结构,那么ConfigParser和ConfigObj将不会有帮助,因为INI文件的键值对必须进入节,并且列表只能是值。
ConfigObj
YAML读取器的^{}实现支持上述所有情况。我使用fuzzyman的优秀ConfigObj进行了很长一段时间的往返评论保存,同时使用PyYAML进行更复杂的结构,这将两者结合得最好。ruamel.yaml包括可以将yamlINI文件转换为YAML的ConfigObj实用程序
ruamel.yaml
yaml
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']
它自动为您处理列表值并允许多行值。如果修改配置文件,可以在保留顺序和注释的同时将其写回。
有关更多信息,请参阅以下文章,包括类型验证示例:
这取决于您想在配置文件中存储什么以及如何使用它们
如果执行往返(yaml→code→yaml)并希望保留注释,则不能使用
PyYAML
或ConfigParser
。如果您想保持密钥的顺序(例如,当您签入配置文件时),
PyYAML
不会这样做,除非您指定!!omap
(这使得更新比普通映射更不容易)如果您希望拥有包含映射/字典的未命名元素列表的复杂结构,那么
ConfigParser
和ConfigObj
将不会有帮助,因为INI文件的键值对必须进入节,并且列表只能是值。YAML读取器的^{} 实现支持上述所有情况。我使用fuzzyman的优秀ConfigObj进行了很长一段时间的往返评论保存,同时使用PyYAML进行更复杂的结构,这将两者结合得最好。
ruamel.yaml
包括可以将yaml
INI文件转换为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文件的简单代码:
它自动为您处理列表值并允许多行值。如果修改配置文件,可以在保留顺序和注释的同时将其写回。
有关更多信息,请参阅以下文章,包括类型验证示例:
相关问题 更多 >
编程相关推荐