python模块整理9ini配置ConfigParse模块

官方文档:http://docs.python.org/library/configparser.html

主要用到两个类

写配置:ConfigParse.RawConfigParse类

读配置:ConfigParse.ConfigParse类

一、ConfigParse.RawConfigParse

>>> import ConfigParser
>>> config=ConfigParser.RawConfigParser()

查看写的类有那些方法
>>> dir(config)
['OPTCRE', 'OPTCRE_NV', 'SECTCRE', '__doc__', '__init__', '__module__', '_boolean_states', '_defaults', '_dict', '_get', '_optcre', '_read', '_sections', 'add_section', 'defaults', 'get', 'getboolean', 'getfloat', 'getint', 'has_option', 'has_section', 'items', 'options', 'optionxform', 'read', 'readfp', 'remove_option', 'remove_section', 'sections', 'set', 'write']

写配置文件

 1 #!/bin/env python
 2 import  ConfigParser
 3 
 4 config=ConfigParser.RawConfigParser()
 5 
 6 confdict={}
 7 confdict['id']=99
 8 confdict['package']='rpm'
 9 confdict['timeout']=150
10 
11 config.add_section('redhat')#增加section
12 
13 config.set('redhat','id',confdict['id']) #增加option
14 config.set('redhat','id',confdict['id'])
15 config.set('redhat','package',confdict['package'])
16 config.set('redhat','timeout',confdict['timeout'])
17 #写入文件中
18 with open('/tmp/redhat.conf','w') as myconf:config.write(myconf)

jin:~ # python redhatconf.py
jin:~ # cat /tmp/redhat.conf
[redhat]
id = 99
package = rpm
timeout = 150

 多一行空行,why?

二、 ConfigParse.ConfigParse

查看读的类有那些方法

>>> config = ConfigParser.ConfigParser()
>>> dir(config)
['OPTCRE', 'OPTCRE_NV', 'SECTCRE', '_KEYCRE', '__doc__', '__init__', '__module__', '_boolean_states', '_defaults', '_dict', '_get', '_interpolate', '_interpolation_replace', '_optcre', '_read', '_sections', 'add_section', 'defaults', 'get', 'getboolean', 'getfloat', 'getint', 'has_option', 'has_section', 'items', 'options', 'optionxform', 'read', 'readfp', 'remove_option', 'remove_section', 'sections', 'set', 'write']

读配置文件

 1 #!/bin/env python
 2 import ConfigParser
 3 
 4 config=ConfigParser.ConfigParser()
 5 
 6 config.read('/tmp/redhat.conf')
 7 
 8 if config.has_option('redhat','id'):
 9         print config.get('redhat','id')
10 
11 print config.sections()
12 print config.get('redhat','package')
13 print config.get('redhat','timeout')

python readredhatconf.py
99
['redhat']
rpm
150

以上是使用模块的方式,下面是网友Mike_Zhang通过列表解析和字典自定函数解析ini配置文件

 http://www.cnblogs.com/MikeZhang/archive/2011/11/19/2255169.html

配置文件格式
/root/test/conf
<global>
shell = all
sql = ['s1', 'k1', 'c1']
脚本内容

 1 #! /usr/bin/python
 2 #-*- coding: utf-8 -*-  
 3 sectionLable = ("<",">")
 4 endlineLable = "\n"
 5 equalLable = "=" 
 6 noteLable = '#'
 7 
 8 def getSectionMap(strtmp,lable1 = sectionLable):
 9      tmp = strtmp.split(lable1[0])
10      tmp = [elem for elem in tmp if len(elem) > 1]
11      tmp = [elem for elem in tmp if elem.rfind(lable1[1]) > 0]
12      sectionDict = {}
13      for elem in tmp:
14          key = elem[0:elem.find(lable1[1]):]
15          value = elem[elem.find(endlineLable)+len(endlineLable)::]
16          sectionDict[key] = value
17      return sectionDict
18 
19 def getValueMap(strtmp):
20     tmp = strtmp.split(endlineLable)
21     tmp = [elem for elem in tmp if len(elem) > 1]
22     valueDict = {}
23     for elem in tmp:
24         if elem.find(noteLable) > 0:
25             elem = elem[0:elem.find(noteLable):]
26         elem = ''.join(elem.split())
27         key = elem[0:elem.find(equalLable):]
28         value = elem[elem.find(equalLable)+len(equalLable)::]
29         valueDict[key] = value
30     return valueDict
31 f = open(raw_input("Input file name : "),"rb")
32 strFileContent = f.read()
33 f.close()
34 var = getSectionMap(strFileContent)
35 dict = {}
36 for k,v in var.items():
37      var2 = getValueMap(v)
38      dict[k] = var2
39 print dict

201203 ini配置文件解析实战:

ini配置文件模块ConfigParse
#vim sjgame.ini
[Login_svrlist]
createchar=/data/sjgame/Logind/
switchsvr=/data/sjgame/Logind/
logind=/data/sjgame/Logind

#!/usr/bin/env python
import ConfigParser
def readConfig(file="sjgame.ini"):
        Config=ConfigParser.ConfigParser() #创建对象ConfigParser
        Config.read(file) #读取配置文件
        sections=Config.sections() #获取配置文件里的sections
        #print  sections
        for section in sections:
                #print section  #section名字 Login_svrlist
                #print Config.items(section) #每个section的内容 [('createchar', '/data/sjgame/Logind/'), ('switchsvr', '/data/sjgame/Logind/'), ('logind', '/data/sjgame/Logind/')]#这里是key和value组成的元组,再构成列表。
                config_dict={} #设置一个空字典,我们要k和v组成字典
                for conf in Config.items(section): #遍历每个section里列表
                        #print conf #conf就是key和value组成的元组
                        servicename=conf[0] #获取元组里k
                        servicedir=conf[1] #获取元组里的v
                        #print servicename
                        #print servicedir
                        config_dict[servicename]=servicedir #将key和value对应添加到字典里
                #print config_dict
                return config_dict #配置文件字典

if __name__=='__main__':
        print readConfig()
        
多section选择输出的section
ofreebsd# cat sjgame.ini
[Login_svrlist]
createchar=/data/sjgame/Logind/
switchsvr=/data/sjgame/Logind/
logind=/data/sjgame/Logind/
[Service_svrlist]
dbcom3=/data/sjgame/service/runlib/
service=/data/sjgame/service/runlib/

#!/usr/bin/env python
import ConfigParser
def readConfig(file="sjgame.ini",section=''):
        Config=ConfigParser.ConfigParser()
        Config.read(file)
        sections=Config.sections()
        #print  sections
        config_dict={}
        for conf in Config.items(section):
                servicename=conf[0]
                servicedir=conf[1]
                config_dict[servicename]=servicedir
        return config_dict
if __name__=='__main__':
        print readConfig(section='Service_svrlist') #读取配置文件时指定要读哪个setction
        #Ser_list=readConfig(section='Service_svrlist') #可以出来赋值给变量
        #print Ser_list
配置文件的里的value是列表
ofreebsd# vim sjgame.ini
[Login_svrlist]
createchar=/data/sjgame/Logind/
switchsvr=/data/sjgame/Logind/
logind=/data/sjgame/Logind/
order=['createchar','switchsvr','logind']
desc=['logind','switchsvr','createchar']
[Service_svrlist]
dbcom3=/data/sjgame/service/runlib/
service=/data/sjgame/service/runlib/
# python ConfigParsetest.py
{'createchar': '/data/sjgame/Logind/', 'order': "['createchar','switchsvr','logind']", 'switchsvr': '/data/sjgame/Logind/', 'desc': "['logind','switchsvr','createchar']", 'logind': '/data/sjgame/Logind/'}
打印K的内容
if __name__=='__main__':
        #print readConfig(section='Service_svrlist')
        Ser_list=readConfig(section='Login_svrlist')
        print Ser_list['desc']
# python ConfigParsetest.py
['logind','switchsvr','createchar']
原文地址:https://www.cnblogs.com/diege/p/2711482.html