我有一个配置文件如下:
[job]
mailto=bob
logFile=blahDeBlah.txt
我想使用SafeConfigParser
阅读选项:
values = {}
config = ConfigParser.SafeConfigParser()
try:
config.read(configFile)
jobSection = 'job'
values['mailto'] = config.get( jobSection, 'mailto' )
values['logFile'] = config.get( jobSection, 'logFile' )
# it is not there
values['nothingThere'] = config.get( jobSection, 'nothingThere' )
.... # rest of code
最后一行当然会抛出错误。如何为config.get()
方法指定默认值?
然后,如果我有一个选项文件如下:
[job1]
mailto=bob
logFile=blahDeBlah.txt
[job2]
mailto=bob
logFile=blahDeBlah.txt
似乎无法指定job1
的默认选项与job2
部分中的默认选项不同。
答案 0 :(得分:22)
将defaults
参数用于构造函数:
# class ConfigParser.SafeConfigParser([defaults[, dict_type]])
#
config = ConfigParser.SafeConfigParser({'nothingThere': 'lalalalala'})
...
...
# If the job section has no "nothingThere", "lalalalala" will be returned
#
config.get(jobSection, 'nothingThere')
答案 1 :(得分:14)
您还可以使用默认的“.ini”文件,并在实际配置文件之前阅读它。
对Default.ini:
[job1]
mailto=jack
logfile=default.log
[job2]
mailto=john
logfile=default.log
的config.ini:
[job1]
mailto=sparrow
logfile=blah.log
[job2]
logfile=blah2.log
解析:
config = ConfigParser.SafeConfigParser()
config.read('default.ini')
config.read('config.ini')
print config.get('job1', 'mailto')
# -> sparrow (from config.ini)
print config.get('job1', 'logfile')
# -> blah.log (from config.ini)
print config.get('job2', 'mailto')
# -> john (from default.ini)
print config.get('job2', 'logfile')
# -> blah2.log (from config.ini)
答案 2 :(得分:8)
您可以使用[DEFAULT]部分为尚未在任何其他部分中定义的属性设置默认值。
E.g。
[DEFAULT]
checkout_root: /data/workspace
[pingpong]
name: Ping Pong App
checkout_root: /home/pingpong
src: %(checkout_root)s/src
[dingdong]
name: Ding Dong App
src: %(checkout_root)s/dingdong_src
对于ding ding应用,src
的值为/data/workspace/dingdong_src
答案 3 :(得分:6)
在Python 3中,您可以为get()方法提供一个回退值,如下所示:
values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0