Итерация по разделам в файле конфигурации

Недавно я познакомился с библиотечным конфигуратором. Я хотел бы проверить, имеет ли каждая секция по крайней мере одно значение типа Boolean, установленное на единицу. Например...

[Horizontal_Random_Readout_Size]
Small_Readout  = 0
Medium_Readout = 0
Large_Readout  = 0

Приведенное выше приведет к ошибке.

[Vertical_Random_Readout_Size]
Small_Readout  = 0
Medium_Readout = 0
Large_Readout  = 1

Вышеупомянутое будет проходить. Ниже приведен некоторый псевдокод того, что я имел в виду...

exit_test = False
for sections in config_file:
    section_check = False
    for name in parser.options(section):
        if parser.getboolean(section, name):
            section_check = True
    if not section_check:
        print "ERROR:Please specify a setting in {} section of the config file".format(section)
        exit_test = True
    if exit_test:
        exit(1)

Вопросы:

1) Как выполнить первый цикл for и выполнить итерацию по разделам конфигурационного файла?

2) Это хороший способ сделать это или есть лучший способ? (Если нет, ответьте на один вопрос.)

Ответ 1

Используя ConfigParser, вы должны проанализировать свою конфигурацию.

После синтаксического анализа вы получите все разделы, используя метод .sections().

Вы можете выполнять итерацию по каждому разделу и использовать .items(), чтобы получить все пары ключ/значение для каждой секции.

for each_section in conf.sections():
    for (each_key, each_val) in conf.items(each_section):
        print each_key
        print each_val

Ответ 2

Лучше всего загрузить ВСЕ строки в файл в какой-то массив (я собираюсь проигнорировать вопрос о том, сколько памяти могло бы использовать, а также о том, следует ли ему пересылать страницы).

Затем оттуда вы знаете, что строки, обозначающие заголовки, соответствуют определенному формату, поэтому вы можете выполнять итерацию по вашему массиву для создания массива объектов, содержащих название заголовка; индекс строки (ссылка на основе нуля для основного массива) и имеет ли этот заголовок значение.

Оттуда вы можете перебирать эти объекты в перекрестной ссылке на главный массив и для каждого заголовка проверять следующие "n" строки (в основном массиве) между текущим заголовком и следующим.

В этот момент вы попадаете в отдельные значения конфигурации для этого заголовка, чтобы вы могли легко разобрать строку и определить значение, после чего вы можете выйти из цикла, если это правда, или для большей надежности выдать исключительность проверьте эти значения курса, чтобы обеспечить ТОЛЬКО одно значение.

Используя этот подход, вы получаете доступ ко всем строкам с одним объектом на заголовок, поэтому ваш код остается гибким и функциональным. Оптимизируйте впоследствии.

Надеюсь, что это имеет смысл и полезно.