python解析ini、conf、cfg文件
jopen
10年前
1.使用python自带的ConfigParser模块:
#test.cfg文件内容: [sec_a] a_key1 = 20 a_key2 = 10 [sec_b] b_key1 = 121 b_key2 = b_value2 b_key3 = $r b_key4 = 127.0.0.1
# -* - coding: UTF-8 -* - import ConfigParser #生成config对象 conf = ConfigParser.ConfigParser() #用config对象读取配置文件 conf.read("test.cfg") #以列表形式返回所有的section sections = conf.sections() print 'sections:', sections #sections: ['sec_b', 'sec_a'] #得到指定section的所有option options = conf.options("sec_a") print 'options:', options #options: ['a_key1', 'a_key2'] #得到指定section的所有键值对 kvs = conf.items("sec_a") print 'sec_a:', kvs #sec_a: [('a_key1', '20'), ('a_key2', '10')] #指定section,option读取值 str_val = conf.get("sec_a", "a_key1") int_val = conf.getint("sec_a", "a_key2") print "value for sec_a's a_key1:", str_val #value for sec_a's a_key1: 20 print "value for sec_a's a_key2:", int_val #value for sec_a's a_key2: 10 #写配置文件 #更新指定section,option的值 conf.set("sec_b", "b_key3", "new-$r") #写入指定section增加新option和值 conf.set("sec_b", "b_newkey", "new-value") #增加新的section conf.add_section('a_new_section') conf.set('a_new_section', 'new_key', 'new_value') #写回配置文件 conf.write(open("test.cfg", "w"))
2.ConfigParser的一些问题:
1,不能区分大小写。
2,重新写入的ini文件不能保留原有 INI文件的注释。
3,重新写入的ini文件不能保持原有的顺序。
4,不支持嵌套。
5,不支持格式校验。
尝试下:configobj模块
#读文件 from configobj import ConfigObj config = ConfigObj(filename) # value1 = config['keyword1'] value2 = config['keyword2'] # section1 = config['section1'] value3 = section1['keyword3'] value4 = section1['keyword4'] # # you could also write value3 = config['section1']['keyword3'] value4 = config['section1']['keyword4'] #写文件如下: from configobj import ConfigObj config = ConfigObj() config.filename = filename # config['keyword1'] = value1 config['keyword2'] = value2 # config['section1'] = {} config['section1']['keyword3'] = value3 config['section1']['keyword4'] = value4 # section2 = { 'keyword5': value5, 'keyword6': value6, 'sub-section': { 'keyword7': value7 } } config['section2'] = section2 # config['section3'] = {} config['section3']['keyword 8'] = [value8, value9, value10] config['section3']['keyword 9'] = [value11, value12, value13] # config.write()