ConfigParser中的items方法raw和vars引數
最近在學習Python,學習到讀取配置檔案這一項。
對ConfigParser中的items方法的後兩個引數非常疑惑,遂help()
>>> help(cfg.items) Help on method items in module ConfigParser: items(self, section, raw=False, vars=None) method of ConfigParser.ConfigParser instance Return a list of tuples with (name, value) for each option in the section. All % interpolations are expanded in the return values, based on the defaults passed into the constructor, unless the optional argument `raw' is true. Additional substitutions may be provided using the `vars' argument, which must be a dictionary whose contents overrides any pre-existing defaults. The section DEFAULT is special.
然後,還是看不懂ORZ~
得了,自己實驗吧!得出了一些結果,在這裡記錄,也供他人蔘考,如有不對之處,還望各路大神斧正指點。
首先,新建一個配置檔案
#實驗用配置檔案
[change]
canChange = %(person)s is very good ;格式%(可替換的值)型別,比如string為s
可以看到,在change下有一個key為canChange。
canChange中,使用%替換一個名為person的key。
我們知道,如果[change]中或者[DEFAULT]中存在person則”%(person)“會被替換,但是配置檔案中並沒有提供這個person。
然後,編碼讀取這個配置檔案
輸出:# -*- coding:utf-8 -*- import ConfigParser cfg = ConfigParser.ConfigParser() cfg.read('D:/WORKTEST/Python/testConfig.txt')#讀取配置檔案 sessionList = cfg.sections () for se in sessionList: print se #print cfg.items(se) #直接報錯 print cfg.items(se,1,{'person':'cty'}) print cfg.items(se,0,{'person':'cty'}) print cfg.items(se,0,{'human':'cty'})
==================== RESTART: D:\WORKTEST\Python\test.py ====================
change
[('canchange', '%(person)s is very good'), ('person', 'cty')]
[('canchange', 'cty is very good'), ('person', 'cty')]
Traceback (most recent call last):
File "D:\WORKTEST\Python\test.py", line 15, in <module>
print cfg.items(se,0,{'human':'cty'})
File "C:\WORK\Python\python27\lib\ConfigParser.py", line 655, in items
for option in options]
File "C:\WORK\Python\python27\lib\ConfigParser.py", line 669, in _interpolate
option, section, rawval, e.args[0])
InterpolationMissingOptionError: Bad value substitution:
section: [change]
option : canchange
key : person
rawval : %(person)s is very good
分析:
可以看到,for迴圈中有5個print:
第一個print輸出session的名稱,即change
第二個print被註釋了,因為其執行直接報錯,找不到需要替換的person
第三個print,items中 -- raw引數為1(也就是true) ; vars為{'person':'cty'} ; 輸出[('canchange', '%(person)s is very good'), ('person', 'cty')]
表明,在raw為true的情況下,忽略%的替換語法,直接輸出
第四個print,items中 -- raw引數為0(也就是false) ; vars為{'person':'cty'} ;輸出[('canchange', 'cty is very good'), ('person', 'cty')]
表明,在raw為false的情況下,vars中包含要替換的key,%語法中的內容被替換
第五個print,不用解釋了吧,不存在可替換的person而是什麼human,自然報錯了
到此,大致弄清楚了這兩個引數的功用