如何为SafeConfigParser设置默认值?

26 投票
4 回答
40126 浏览
提问于 2025-04-16 18:13

我有一个配置文件,内容如下:

[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)

撰写回答