configparser 模块是标准库中用来解析类似 .ini 文件的模块。
配置文件格式
模块所处理的配置文件格式类似于旧版的 .ini 文件,由多个节区组成,每个节区下面又有不同的选项。
每个节区使用 [section] 方式表示,方括号中间的是节区的名称。
每个节区下面的选项用 key = value 的方式表示,value值可以是 string、int、float、bool,默认为 string 类型。
另外,如果以 ;
或者 #
开头,则这一行的内容为注释行。
例子
配置文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| [DEFAULT]
url = %(protocol)s://%(server)s:%(port)s/bugs/
protocol = http
server = 127.0.0.2
port = 80
[bug_tracker]
server = localhost
port = 8080
username = dhellmann
password = SECRET
[text]
long_string = This is a long string,
the second line is here.
[special]
url = http://${bug_tracker:server}:${DEFAULT:port}/bugs/
|
读取
configparser 模块可以读取单个文件、多个文件的列表、字符串类型的配置。
1
2
3
4
5
6
7
8
9
| from configparser import ConfigParser
parser = ConfigParser()
config_file = "./14.1 configparser.conf"
parser.read(config_file)
config_list = ['1.conf', '2.conf', "./14.1 configparser.conf"]
found = parser.read(config_list)
|
上面的例子为读取单个文件,以及多个文件的例子,读取多个文件时,不同的配置文件的节区相互调用参数。
获取选项
通过 get() 方法获取节区下的选项的配置值。
1
2
3
4
5
6
7
8
| print("default server -> ", parser.get("DEFAULT", "server"))
print("bug_tracker server -> ", parser.get("bug_tracker", "server"))
print('bug_tracker port -> ', parser.getint("bug_tracker", "port"))
# output
default server -> 127.0.0.2
bug_tracker server -> localhost
bug_tracker port -> 8080
|
设置选项
通过 set() 方法设置新的选项值。
1
2
3
4
5
6
7
8
| print("url -> ", parser.get("DEFAULT", "url"))
parser.set("DEFAULT", "server", "127.0.0.1")
print("url -> ", parser.get("DEFAULT", "url"))
# output
url -> http://127.0.0.2:80/bugs/
url -> http://127.0.0.1:80/bugs/
|
DEFAULT节区
DEFAULT节区 是默认节区,里面的选项被其他节区共享,也就是说,如果在节区中没有找到对应的选项,解析器会在 DEFAULT节区 中进行查找。
1
2
3
4
| print('bug_tracker protocol -> ', parser.get("bug_tracker", "protocol"))
# output
bug_tracker protocol -> http
|
占位符
在配置文件中,可以使用 %(key)s 的方式使用占位符,key可以为本地节区内的所有选项,如果本地节区未找到,则会去 DEFAULT节区 中查找。
1
2
3
4
5
6
7
8
9
10
11
12
| # config
[DEFAULT]
url = %(protocol)s://%(server)s:%(port)s/bugs/
protocol = http
server = 127.0.0.1
port = 80
# py
print("url -> ", parser.get("DEFAULT", "url"))
# output
url -> http://127.0.0.1:80/bugs/
|
另外,占位符也可以扩展,选择 别的节区的特定选项。
1
2
3
4
5
6
7
8
9
10
11
12
13
| # config
[special]
url = http://${bug_tracker:server}:${DEFAULT:port}/bugs/
# py
from configparser import ConfigParser, ExtendedInterpolation
parser = ConfigParser(interpolation = ExtendedInterpolation()) # 初始化解析器的时候,需要配置 interpolation 参数
...
print('special url -> ', parser.get("special", "url"))
# output
special url -> http://localhost:80/bugs/
|
值得注意的是,占位符只能有一种方式,如果选择了 $ 的方式,那么 % 的方式就不能使用了。反之,亦然。
Author
Alfons
LastMod
0001-01-01
License
Creative Commons BY-NC-ND 3.0