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问题的最佳答案