Python ConfigParser:如何计算特定部分中设置的选项(而不是默认值)

时间:2010-02-22 13:28:26

标签: python configparser

我有一个配置文件,我使用标准ConfigParser库中的RawConfigParser读取。我的配置文件有一个[DEFAULT]部分,后跟一个[特定]部分。当我遍历[specific]部分中的选项时,它包含[DEFAULT]下的选项,这就是要发生的事情。

但是,对于报告,我想知道该选项是在[specific]部分还是[DEFAULT]中设置的。有没有办法用RawConfigParser的界面做到这一点,或者我没有选择,只能手动解析文件? (我已经看了一下,我开始害怕最糟糕的......)

例如

[默认]

name = a

surname = b

[SECTION]

name = b

年龄= 23

你怎么知道,使用RawConfigParser界面,是否选项名称&姓氏是从[默认]部分或[部分]部分加载的?

(我知道[DEFAULT]适用于所有人,但你可能想在内部报告这样的事情,以便通过复杂的配置文件工作)

谢谢!

3 个答案:

答案 0 :(得分:5)

我最近通过将选项放入词典,然后合并词典来做到这一点。关于它的巧妙之处在于用户参数覆盖了默认值,并且很容易将它们全部传递给函数。

import ConfigParser
config = ConfigParser.ConfigParser()
config.read('config.ini')

defaultparam = {k:v for k,v in config.items('DEFAULT')}
userparam = {k:v for k,v in config.items('Section 1')}

mergedparam = dict(defaultparam.items() + userparam.items())

答案 1 :(得分:2)

鉴于此配置文件:

[DEFAULT]
name = a
surname = b

[Section 1]
name  = section 1 name
age = 23
#we should get a surname value from defaults

[Section 2]
name = section 2 name
surname = section 2 surname
age = 24

这是一个可以理解第1节使用默认姓氏属性的程序。

import ConfigParser

parser = ConfigParser.RawConfigParser()
parser.read("config.ini")
#Do your normal config processing here
#When it comes time to audit default vs. explicit,
#clear the defaults
parser._defaults = {}
#Now you will see which options were explicitly defined
print parser.options("Section 1")
print parser.options("Section 2")

这是输出:

['age', 'name']
['age', 'surname', 'name']

答案 2 :(得分:0)

RawConfigParser.has_option(section, option)做这个工作吗?