INI 就是英文 “initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是.ini
也可以是.cfg
,.conf
或者是.txt
。
- 文件中由多个section构成,每个section下又有多个配置项
- section不能重复,里面数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释用英文分号(;)
1 | ;这里是注释 |
- 在section声明后的所有parameters都是属于该section。
- 对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。
- Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。
简单使用
read(filename)
: 直接读取文件内容get(section, option)
: 获取section
下具体某一配置项的值(返回的是字符串)sections()
: 得到所有的section,并以列表的形式返回options(section)
: 得到该section的所有optionitems(section)
: 键值对的形式 得到该section的所有optiongetint(section,option)
、cnf.getboolean(section,option)
、getfloat(section,option)
: 获取整型、布尔型和浮点型的option
的值
1 | [mysql] |
1 | import configparser |
增删改查(并不能修改源文件)
一样可以增删改查:
add_section(section)
添加一个新的section-
set(section, option, value)
对section中添加 option 和 value remove_section(section)
删除某个 section-
remove_option(section, option)
删除某个 section 下的 option write()
将设置的新的 section 和 option 写到文件中
1 | # 删除mysql这个sections里db_ip(并不会真的删除ini文件的数据) |
修改源文件
- 前面讲的remove和set方法并没有真正的修改ini文件内容,
- 只有当执行conf.write()方法的时候,才会修改ini文件内容
1 | conf.write(open('conf.ini', "w")) # 删除原文件重新写入 |
1 | # 创建管理对象 |
操作configparser类来生成配置文件
1 | import configparser |
直接获取数据类型
一般情况下,configpaser类是无法识别配置文件中的value的数据类型的,它总是以字符串的形式来存储这些类型,所以当涉及到int float等类型的时候就需要我们自己对它进行转换
configparser 为我们提供了
getboolean()
,getint()
,getfloat()
方法用来对读对应类型的配置
1 | import configparser |
getboolean方法可以识别
yes/no
,on/off
,true/false
,1/0
等数据并转换为布尔值, 其他值都会导致抛出ValueError 异常
[DEFAULT]
configparser有default_section的概念,默认为[DEFAULT]节,也就是之后的所有的section都有该默认section中的键值对
也就是说, 当读取的配置项在不在指定的节里时,ConfigParser 将会到 [DEFAULT] 节中查找
Interpolation
创建ConfigParser()类的时候可以指定interpolation参数,
如果将interpolation设置为
BasicInterpolation()
,则配置文件中的%(key)s
结构会被解析如,比如
example.ini
文件内容如下:1
2
3
4
5[Paths]
home_dir: /Users
; 使用上面的home_dir
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures1
2
3
4
5
6
7
8import configparser
config = configparser.ConfigParser(interpolation=configparser.BasicInterpolation())
print(config.read(r'F:\coding\python\example.ini'))
# ['F:\\coding\\python\\example.ini']
print(config['Paths']['my_dir'])
# '/Users/lumberjack'%(home_dir)s
被解析成了/Users
,说白了,相当于配置文件中的变量也可以使用
SafeConfigParser()
:
更加智能化,在section中是否存在%()s会自动判断