Logo
Section 1 / 2

ConfigObj 快速入门

使用 ConfigObj 读取和生成 INI 配置文件

导入

ConfigObj 快速入门

使用 ConfigObj 读取和生成 INI 配置文件

Python 自带一个名为 ConfigParser 的便捷模块,适用于创建和读取配置文件(即 INI 文件)。然而,Michael Foord(《IronPython in Action》作者)和 Nicola Larosa 决定编写他们自己的配置模块,名为 ConfigObj。在许多方面,它比标准库中的模块更优秀。例如,它在读取配置文件时会返回一个类似字典的对象。ConfigObj 还能识别一些 Python 类型。另一个实用功能是,你可以创建一个配置规范,ConfigObj 会使用该规范来验证配置文件。

快速入门

首先,你需要获取 ConfigObj。这是一个使用上一章所学包安装知识的好时机。以下是通过 pip 安装 ConfigObj 的方法:

1pip install configobj

安装完成后,我们就可以开始使用了。首先打开文本编辑器,创建一个包含以下内容的文件:

1product = Sony PS3 2accessories = controller, eye, memory stick 3# 这是一个会被忽略的注释 4retail_price = $400

将文件保存到任意位置。我将其命名为 config.ini。现在来看看如何使用 ConfigObj 提取这些信息:

1from configobj import ConfigObj 2config = ConfigObj("config.ini") 3print(config["product"]) 4# 'Sony PS3' 5 6print(config["accessories"]) 7# ['controller', 'eye', 'memory stick'] 8 9print(type(config["accessories"])) 10# <class 'list'>

如你所见,ConfigObj 使用 Python 的 dict API 来访问提取的信息。只需将文件路径传递给 ConfigObj,它就会自动解析文件。如果信息位于某个节(例如 [Sony])下,则需要在访问时加上节名前缀,比如:config["Sony"]["product"]。此外,请注意 accessories 部分被返回为字符串列表。ConfigObj 会将任何用逗号分隔的合法行转换为 Python 列表。你还可以在配置文件中创建多行字符串,只要用三重单引号或三重双引号包裹即可。

如果需要在文件中创建子节,可以使用额外的方括号。例如,[Sony] 是顶层节,[[Playstation]] 是子节,[[[PS3]]] 是子节的子节。你可以创建任意深度的嵌套结构。关于文件格式的更多细节,建议查阅 ConfigObj 的官方文档。

接下来,我们将反向操作,通过程序自动生成配置文件。

1import configobj 2 3def createConfig(path): 4 config = configobj.ConfigObj() 5 config.filename = path 6 config["Sony"] = {} 7 config["Sony"]["product"] = "Sony PS3" 8 config["Sony"]["accessories"] = ['controller', 'eye', 'memory stick'] 9 config["Sony"]["retail price"] = "$400" 10 config.write() 11 12if __name__ == "__main__": 13 createConfig("config.ini")

如你所见,仅需 13 行代码即可完成。上述代码中,我们定义了一个函数,并传入配置文件的路径。接着创建一个 ConfigObj 对象,并设置其 filename 属性。要创建节,只需创建一个名为 "Sony" 的空字典。然后以相同方式逐项添加节的内容。最后调用配置对象的 write 方法,将数据写入文件。

安装模块

使用 configspec 验证配置