python解析配置文件(.ini)

在开发过程中,有一类文件是常用的,比如配置或叫初始化文件(.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'
View Code

解析该配置文件,实例如下:
 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'))
View Code

以上代码中,将修改的内容存入另一个文件。

 
posted @ 2021-05-24 20:53  如知  阅读(1110)  评论(0编辑  收藏  举报