python模块整理9-ini配置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']

 

 

你可能感兴趣的:(python)