ConfigObj способ получить список разделов, которые содержат подразделы - PullRequest
3 голосов
/ 11 февраля 2011

Я использую 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 голосов
/ 12 февраля 2011

Вы можете использовать метод walk и раздел печати, у которого depth больше единицы.

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

config.walk(gather_subsection)

Документация по глубине

глубина

Уровень вложенности текущего раздела.

Если вы создадите новый ConfigObj и добавите разделы, 1 будет добавлен к уровню глубины между разделами.

Документация для прогулки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...