问题描述:
我们常用 .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