在开发过程中,有一类文件是常用的,比如配置或叫初始化文件(.ini)。文件里面可以存放主机ip地址、用户名/密码及其他一些有关项目的公共信息。
这类文件的处理一般比较简单,比起excel、JSON等数据文件来说应该比较短小。因为数据文件是面对数据分析的,而配置文件经常作为全局变量。
python的configparse用于处理配置文件。目前感觉configparse比json的好处是配置文件简单清晰,但不足之处是无法实现
多层嵌套。configparse主要用于在python中进行配置文件的读取。读取后的数据结构是列表,可以按照列表进行处理。
配置文件不用区分数据类型。最后都按照字符串读取。
基本的读取配置文件模块函数:
-read(filename) 直接读取ini文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数
-write(filename,'w')) 保存配置cf.write(open(filename,'w'))
-add_section(section) 添加一个新的section
-set( section, option, value) 对section中的option进行设置,需要调用write将内容写入配置文件
先构造一个配置文件my.ini。内容如下:

[xiong] name = xiong age = 23 gender = male [ying] name = ying age = 24 gender = female [cai] host_ip = 127.0.0.1 host_name = test1 user1 = root user1_passwd = 123456 user2 = hdfs user2_passwd = abcdef [host] IP=127.0.0.1 PORT=8090 [auth] user='Alex' passwd='123456'
解析该配置文件,实例如下:

1 from configparser import ConfigParser 2 cf=ConfigParser(allow_no_value=True) 3 cf.read(r'doc_file/my.ini') 4 5 print(cf.sections())#获取配置文件中的sections,结果:['xiong', 'ying', 'cai', 'host', 'auth'] 6 print("sections-0",cf.sections()[0]) 7 for section in cf.sections(): #对列表进行遍历 8 print(section) #配置文件的第一层[]中内容,eg.xiong 9 print(cf.items(section)) #配置文件中[]下的内容。依然是列表。 10 print(cf.has_section('xiong'))#是否有xiong这个section,结果:True 11 print(cf.items('xiong'))#返回xiong这个section中的子项,结果:[('name', 'xinog'), ('age', '23'), ('gender', 'male')] 12 print(cf.options('xiong'))#返回xiong这个section中的变量,结果:['name', 'age', 'gender'] 13 print(cf.has_option('xiong','age'))#判断xiong这个section中是否有age这个变量 14 15 #这个cf.get方法才是常用的方法,以上方法只是在遍历或者其他通用方式下用。 16 #因为配置文件是可读的,用get方法直接获取host、ip信息即可。 17 print(cf.get('xiong','age'))#获取xiong这个section中age变量的值:23 18 print(cf.get('host','ip')) 19 #>>>127.0.0.1,这个功能才是最实际的用途。这也可以看出此功能比json的略有优势:直观、方便读取 20 print("0:",cf.items('cai')[0]) 21 # cf.remove_section('xiong')#移除xiong这个section 22 # cf.add_section("cai-3")#添加一个叫cai的section 23 # cf.set('cai-3','host','192.168.0.2') 24 # #保存文件 25 cf.write(open(r'doc_file/my.ini.bak','w'))
以上代码中,将修改的内容存入另一个文件。