>>> from defusedxml.ElementTree import parse
>>> et = parse(xmlfile)
Конфигурационные файлы
Большинство программ предлагают различные параметры или настройки. Дина-
мические настройки могут быть переданы как аргументы программы, но долго-
временные настройки должны где-то храниться. Искушение определить собствен-
ный формат конфигурационного файла быстро и неаккуратно очень сильно, но вы
Структурированные текстовые файлы
229
должны устоять. Как правило, результат получаем неаккуратно, но не очень бы-
стро. Вам нужно обслуживать как программу-писатель, так и программу-читатель
(которая иногда называется парсером). Существуют хорошие альтернативы, кото-
рые вы можете добавить в свою программу, включая те, что были показаны в пре-
дыдущих разделах.
Здесь мы используем стандартный модуль configparser, который обрабатыва-
ет файлы с расширением .ini, характерные для Windows. Такие файлы имеют
разделы, содержащие определения ключ = значение. Так выглядит минимальный
файл settings.cfg:
[english]
greeting = Hello
[french]
greeting = Bonjour
[files]
home = /usr/local
# simple interpolation:
bin = %(home)s/bin
А так выглядит код, который позволяет считать его и разместить в структурах
данных:
>>> import configparser
>>> cfg = configparser.ConfigParser()
>>> cfg.read('settings.cfg')
['settings.cfg']
>>> cfg
<configparser.ConfigParser object at 0x1006be4d0>
>>> cfg['french']
<Section: french>
>>> cfg['french']['greeting']
'Bonjour'
>>> cfg['files']['bin']
'/usr/local/bin'
Доступны и другие опции, включая более мощную интерполяцию. Обратитесь
к документации configparser (http://bit.ly/configparser). Если вам нужно более двух
уровней вложенности, попробуйте использовать YAML или JSON.
Другие форматы обмена данными
Такие бинарные форматы обмена данными, как MsgPack (http://msgpack.org/),
Protocol Buffers (https://code.google.com/p/protobuf/), Avro (http://avro.apache.org/docs/
current/), Thrift (http://thrift.apache.org/), обычно компактнее и быстрее, чем XML
или JSON. Поскольку они бинарные, ни один из них не может быть изменен чело-
веком, вооружившимся текстовым редактором.