用ConfigObj获取包含子部分的部分列表的方法

3 投票
1 回答
3446 浏览
提问于 2025-04-16 11:38

我使用ConfigObj来解析配置文件,格式如下:

[APACHE]
init_script=
...
[TOMCAT]
    [[TOMCAT1]]
    init_script =
    [[TOMCAT2]]
    init_script =

在某些情况下,[TOMCAT]部分可能会有嵌套的子部分,有时候则没有——只有一个根实例[TOMCAT]。

我刚接触Python,所以我很好奇,有没有方便的方法可以遍历配置文件,只获取那些包含嵌套子部分的元素。

目前我使用的是这样的方式:

def is_section(config_section):
    """
       Check that config elemet is a section
    """
    try:
     config_section.keys()
    except AttributeError:
        return False
    else:
        return True
onfig = ConfigObj(config_file,list_values=True,interpolation=True)

sections = config.keys()

for section in sections:
     if is_section(config[section]):
        for subsection in config[section]:
            if is_section(config[section][subsection]):
                print  "Subsection ", subsection

1 个回答

4

你可以使用 walk 这个方法,打印出深度大于一的部分。

def gather_subsection(section, key):
    if section.depth > 1:
        print "Subsection " + section.name

config.walk(gather_subsection)

关于深度的文档

深度

当前部分的嵌套层级。

如果你创建一个新的 ConfigObj 并添加部分,那么在部分之间,深度层级会增加 1。

关于 walk 的文档

撰写回答