如何为SafeConfigParser设置默认值?

Mar*_*ark 18 python default default-value configparser data-structures

我有一个配置文件如下:

[job]
mailto=bob
logFile=blahDeBlah.txt
Run Code Online (Sandbox Code Playgroud)

我想阅读使用的选项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
Run Code Online (Sandbox Code Playgroud)

最后一行当然会抛出一个错误.如何为config.get()方法指定默认值?

然后,如果我有一个选项文件如下:

[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt
Run Code Online (Sandbox Code Playgroud)

似乎没有办法为job1部分中的默认选项指定默认选项job2.

Eli*_*sky 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')
Run Code Online (Sandbox Code Playgroud)

  • Todah,我很困惑,似乎没有办法为默认值指定[section]名称.我今天会试试. (13认同)
  • 我不明白这是如何回答这个问题的.如果job1和job2的默认值应该不同怎么办? (12认同)

小智 16

您还可以使用默认的".ini"文件,并在实际配置文件之前读取它.

对Default.ini:

[job1]
mailto=jack
logfile=default.log

[job2]
mailto=john
logfile=default.log
Run Code Online (Sandbox Code Playgroud)

config.ini文件:

[job1]
mailto=sparrow
logfile=blah.log

[job2]
logfile=blah2.log
Run Code Online (Sandbox Code Playgroud)

解析:

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)
Run Code Online (Sandbox Code Playgroud)


Kau*_*lya 8

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

例如

[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
Run Code Online (Sandbox Code Playgroud)

对于ding ding应用程序,src将是值/data/workspace/dingdong_src


And*_*ite 7

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

values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0
Run Code Online (Sandbox Code Playgroud)