Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 175

>>> # protected:

>>> 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. Поскольку они бинарные, ни один из них не может быть изменен чело-

веком, вооружившимся текстовым редактором.