TOC
INI文件处理
ini文件其实它的意思就是初始化文件,这个初始化文件,一般用来配置的,每一个软件都需要进行配置,这种init格式的配置文件到目前为止还是非常流行的,比如MySQL的配置文my.cnf就是ini类型的,ini文件一样是一个纯文本文件,没有什么特殊的格式,从头到尾全部都是文本;
[DEFAULT]
a = test
[mysql]
default-character-set=utf8
[mysqld]
datadir=/data/mysql
port=3306
character-set-server=utf8
这个ini类型的文本文件定义了一些特殊的标记,使用中括号括起来的部分,是一个配置段名称,在configparser里面也称之为section,这个配置段下面的配置都属于这个配置段,而这个action配置段下面的每一个键值对儿称之为一个option,需要注意的是在Python的configparser模块中,如果该配置文件,存在一个[DEFAULT]的action时,此模块下的所有option与其他action共享,我们可以把它理解为全局配置段,如果自定义action和[DEFAULT]下面都有,应该存在一个优先级关系,待测试;
get(section, option[, raw[, vars]]):为指定的section获取一个选项值。如果提供了vars,它必须是一个字典。该选项在vars(如果提供)、分段和默认值中查找;
items(section[, raw[, vars]]):返回给定section中每个选项的(名称、值)对的列表;
read(filenames,encoding):读取配置文件,可以是一个,可以是多个;
write:将配置写如一个文件对象,是文件对象不是文件本身,可以使用open创建一个文件对象;
sections:读取所有section,以一个列表的形式返回;
get(section, option):从指定section获取一个选项的值;
set(section, option):从指定section设置一个选项的值;
add_section:添加一个section;
defaults:获取DEFAULT下面的所有的选项的键和值;
getboolean(section, option):强制转换为布尔型,”1”, “yes”, “true”, and “on”, 转换为True,”0”, “no”, “false”, and “off”, 转换为Falseo 其他返回ValueError;
items(section):返回给定section中每个选项的(name,value)对的列表;
getint(section, option):它将指定section中的选项强制转换为整数;
getfloat(section, option):它将指定section中的选项强制转换为浮点型;
has_section(section):判断是否存在指定的section;
has_option(section, option):判断指定section的option是否存在;
初始化配置
利用configparser来初始化一个配置文件,configparser起初的数据都存在内存中,所以我们需要调用其write方法,将内存中的数据刷写到文件中进行持久化,此处需要使用open创建一个文件对象;
import configparser
config = configparser.ConfigParser() #引入模块去实例化成一个对象,相当于一个空字典config={}
config["RESUME"] = {'name': 'cce',
'age': '18',
'gender': 'm',
'name':'cce',
'country':'cn',
'city':'wuhan',
}
config["INFORMATION"] = {'QQ': '986495818',
'webchat': 'caichangen',
'blog': 'blog.doorta.com',
}
with open('example.conf', 'w') as configfile:
config.write(configfile) #调用config对象的write方法,写入到configfile 这是此模块独有的使用方法
# [RESUME]
# name = cce
# gender = m
# city = wuhan
# age = 18
# country = cn
#
# [INFORMATION]
# blog = blog.doorta.com
# webchat = caichangen
# qq = 986495818
添加ACTION
当配置文件初始化完成之后,我们也可以调用其add_section方法新增一个action;
import configparser
config = configparser.ConfigParser() #引入模块去实例化成一个对象,相当于一个空字典config={}
config.read('example.conf') #利用对象读取我们的配置文件,在增删改查的时候必须使用,不然原来的数据就对被覆盖;
config.add_section('test') #添加块名
config.set('test','name','cce') #添加配置
config.write(open('example.conf','w')) #修改完成之后写入
删除操作
当我们要删除已成型配置文件的action时,可以调用remove_section方法来实现,如果只删除指定action下面的option时,我们可以调用remove_option来实现;
import configparser
# 删除option
config = configparser.ConfigParser() #引入模块去实例化成一个对象,相当于一个空字典config={}
config.read('example.conf') #利用对象读取我们的配置文件,在增删改查的时候必须使用,不然原来的数据就对被覆盖;
config.remove_option('test','name') #删除配置
config.write(open('example.conf','w')) #修改完成之后写入
# 删除action
config.remove_section('test') #删除块名,块名下的配置也会相继全部删除
config.write(open('example.conf','w')) #修改完成之后写入
查询操作
对于查询操作,需要注意的一点是,在有DEFAULT配置块的时候,DEFAULT的配置其他所有配置块都共用,可以尝试在DEFAULTL配置块下添加City=CN的配置,去查看其他块也能查询到;
import configparser
config = configparser.ConfigParser() #引入模块去实例化成一个对象,相当于一个空字典config={}
config.read('example.conf') #利用对象读取我们的配置文件
print(config.sections()) #打印我们的配置块名称
print('RESUME' in config) #判断用户输入的这个字符串是否是我们配置文件中的一个配置块 True
print(config['RESUME']['name']) #查看指定块下的指定配置
for key in config['INFORMATION'].keys(): #遍历key
print(key)
for values in config['INFORMATION'].values(): #遍历values
print(values)
print(config.options('INFORMATION')) # 遍历keys,并组成列表
print(config.items('INFORMATION')) # 遍历配置块,将键和值组成一个元祖
print(config.get('INFORMATION','blog')) #取出指定配置块,下指定key的value