Чтение файла конфигурации в Python (сохранение/чтение вложенных данных с помощью ConfigParser)

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

Обычно я бы использовал YAML для хранения данных, но я думаю, что использование ConfigParser было бы более питоническим подходом и сделало бы скрипт более «прозрачным» для других программистов Python, поскольку удивительное количество людей не знакомы с форматом YAML .

Я очень быстро просмотрел документацию configParser, но не смог выяснить, может ли он работать с вложенными данными.

Мои данные конфигурации будут иметь следующую структуру:

<markers>
    <marker>
        <date></date>
        <value></value>
    </marker>
</markers>
<items>
    <item>
        <start></start>
        <end></end>
        <mcc>
           <chg>
                <date></date>
                <ival></ival>
                <fval></fval>
           </chg>
        </mcc>
    </item>
</items>

Могу ли я использовать ConfigParser для чтения/(записи?) такого рода вложенных данных в файле конфигурации? (Меня больше интересует возможность читать, чем писать файл конфигурации. Я не возражаю против написания файла конфигурации вручную, если это необходимо).


person Homunculus Reticulli    schedule 15.02.2012    source источник
comment
ИМХО, знакомое не значит "прозрачное" и уж тем более самое лучшее. Я не знаю ни одного настоящего программиста на питоне, который бы за полчаса не выучил и не понял YAML — это один из самых простых и человекочитаемых форматов, если не вдаваться в подробности :). Используйте YAML - несите красоту в массы! P.S. извините за неудобства.   -  person Mikhail Churbanov    schedule 15.02.2012
comment
К вашему сведению, вы, безусловно, можете использовать XML!   -  person Katriel    schedule 15.02.2012


Ответы (2)


Нет, configparser не поддерживает вложенность. Вместо этого вы можете посмотреть configObj. Он зрелый и довольно широко используется.

person seb    schedule 15.02.2012
comment
ссылка мертва. Вместо этого попробуйте configobj.readthedocs.io/en/latest/configobj.html. - person miller the gorilla; 31.10.2018

В соответствии с вашими данными xml вам нужен раздел и подраздел. Таким образом, вы можете использовать ConfigParser, но вы должны указать подраздел с некоторым значением, например

[markers]
[markers.marker]
date=''
value=''

[items]
[items.item]
start=''
end=''
[items.item.mcc]
[items.item.mcc.chg]
date=''
ival=''
fval=''

Затем вам нужно переопределить функцию getsection, чтобы получить вложенные данные.

person Nilesh    schedule 15.02.2012