如何为SafeConfigParser设置默认值?
我有一个配置文件,内容如下:
[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
的默认选项。
4 个回答
20
在Python 3中,你可以给get()方法提供一个备用值,方法如下:
values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0
23
使用构造函数中的 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')
23
你还可以使用一个默认的“.ini”文件,并在你的实际配置文件之前先读取它。
默认的.ini文件内容:
[job1]
mailto=jack
logfile=default.log
[job2]
mailto=john
logfile=default.log
你的配置文件内容:
[job1]
mailto=sparrow
logfile=blah.log
[job2]
logfile=blah2.log
解析这些文件的过程:
import ConfigParser # For Python 3 use the configparser module instead (all lowercase)
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)