.ini 配置文件中配置字典列表(List of Dicts)的最佳实践

问题描述:

我们常用 .ini 格式的文件来保存和使用程序配置,如何在 .ini 文件内保存字典列表(List of Dicts)形式的配置?

类似于:

objects:
[
  {
    name:a
  },
  {
    name:b
  }
]

问题分析:

根据维基百科的介绍,.ini 格式只能由 section 和 section 之内的 key、value 对构成,而且 value 一般只支持 boolean、string、number 这几种类型,虽然有的解析器也能支持 Array,但终究不支持字典/对象数据类型,所以也只能写一写简单的数组,无法表示包含字典/对象的数组。

另外,.ini 格式支持 section 嵌套,通过在 section 名称中的点 (.)表示嵌套的层级关系,例如:

[section]
domain = wikipedia.org

[.subsection]
foo = bar

[section.another_subsection]
foo = bar

其中 “subsection” 和 “another_subsection” 都是 “section” 的子级 section。但是很多 ini 解析器都不支持嵌套。不过即便解析器不直接支持嵌套,我们仍然可以借助 section 的名字解析出嵌套关系。

解决方案:

.ini 文件示例:

[object.0]
name=a

[object.1]
name=b

在 Python 中可以这样使用 ConfigParser 来解析:

from configparser import ConfigParser


config = ConfigParser()
config.read('example.ini')

objects = []

for s in config.sections():
    if s.startswith('object.'):
         objects.append(dict(config.items(s)))

参考文献:

https://en.wikipedia.org/wiki/INI_file

configparser — Configuration file parser — Python 3.11.1 documentation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值