Python 如何设置SafeConfigParser的默认值?

Python 如何设置SafeConfigParser的默认值?,python,data-structures,default,default-value,configparser,Python,Data Structures,Default,Default Value,Configparser,我有一个配置文件,如下所示: [job] mailto=bob logFile=blahDeBlah.txt [job1] mailto=bob logFile=blahDeBlah.txt [job2] mailto=bob logFile=blahDeBlah.txt values['nothingThere'] = config.get('job', 'nothingThere', fallback=0) print(values['nothingThere']) # -> 0

我有一个配置文件,如下所示:

[job]
mailto=bob
logFile=blahDeBlah.txt
[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt
values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0
我想使用
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()
方法指定默认值

同样,如果我有一个选项文件,如下所示:

[job]
mailto=bob
logFile=blahDeBlah.txt
[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt
values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0

似乎无法为
job1
指定不同于
job2
部分中默认选项的默认选项使用
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')

您可以使用[DEFAULT]部分为在任何其他部分中未定义的属性设置默认值

例如


对于叮叮应用程序,
src
的值将是
/data/workspace/dingdong\u src

,您也可以使用默认的“.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)

在Python 3中,可以为get()方法提供一个回退值,如下所示:

[job]
mailto=bob
logFile=blahDeBlah.txt
[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt
values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0

Todah,我很困惑,似乎没有办法指定默认的[section]名称。我今天就试试。我不明白这是怎么回答这个问题的。如果job1和job2的默认值应该不同呢?这实际上不起作用,因为“nothingThere”会自动小写为“nothingThere”。如果希望选项名称区分大小写,则需要执行config.optionxform=str,然后执行config.set('DEFAULT','nothingThere','lalala')这实际上是两个独立的问题。此答案是对OP第二个问题的回答。默认值已由第二个参数提供,我从来没有见过一个
回退
参数。您能指出一些文档吗?请注意,这是解析器级别的get方法,而不是节的get方法,因此第二个参数是键,而不是默认值。此处的文档-@madpysicator这取决于您如何使用ConfigParser。您可以使用
config[“my_section”].get(“my_option”,“fallback_value”)
(这里,第二个参数“fallback_value”将是默认值)或
config.get(“my_section”,“my_option”,“fallback_value”)
(这里的前两个参数是指定您希望获得哪一部分的哪个选项)这正是我想要的。谢谢。我认为这是对OP问题的最佳答案