如何为 SafeConfigParser 设置默认值?

Posted

技术标签:

【中文标题】如何为 SafeConfigParser 设置默认值?【英文标题】:How can I set default values for SafeConfigParser? 【发布时间】:2011-08-31 17:14:28 【问题描述】:

我有一个配置文件如下:

[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 部分中的默认选项不同的默认选项。

【问题讨论】:

这实际上是两个独立的问题。 【参考方案1】:

对构造函数使用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')

【讨论】:

Todah,我很困惑,似乎没有办法指定默认的 [section] 名称。我今天试试看。 我不明白这是如何回答这个问题的。如果 job1 和 job2 的默认值应该不同怎么办? 这实际上不起作用,因为“nothingThere”会自动小写为“nothingthere”。如果您希望选项名称区分大小写,则需要执行 config.optionxform=str, 然后 config.set('DEFAULT', 'nothingThere', 'lalalalala')【参考方案2】:

您可以使用 [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

对于叮叮应用,src 的值为/data/workspace/dingdong_src

【讨论】:

这个答案是OP第二个问题的答案。【参考方案3】:

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

【讨论】:

我认为这是对 OP 问题的最佳答案【参考方案4】:

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

values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0

【讨论】:

第二个参数已经提供了默认值,我从未见过fallback 参数。你能指出一些文档吗? 请注意,这是解析器级别的 get 方法,而不是部分的 get 方法,因此第二个参数是键,而不是默认值。此处的文档 - docs.python.org/3/library/configparser.html#fallback-values @MadPhysicist 这取决于您如何使用 ConfigParser。您可以使用config["my_section"].get("my_option", "fallback_value") 调用它(实际上,第二个参数“fallback_value”将是默认值)或config.get("my_section", "my_option", fallback="fallback_value")(这里的第一个参数是指定您想要获取哪个部分的哪个选项) 这正是我想要的。谢谢。

以上是关于如何为 SafeConfigParser 设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIButton 设置默认状态图像?

如何为富通知设置默认操作?

如何为 xz 归档器设置默认参数?

如何为mysql xampp,windows设置默认排序规则

Android:如何为参数变量设置默认值

如何为整个 c# 应用程序设置默认文化信息