Сообщить об ошибке.

Интерполяция значений INI-файла парсером ConfigParser в Python

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

Помимо основной функциональности класс configparser.ConfigParser() поддерживает интерполяцию. Это означает, что значения могут быть предварительно обработаны перед возвратом их из вызовов метода config.get().

Базовая интерполяция.

configparser.BasicInterpolation:

Класс configparser.BasicInterpolation() это реализация по умолчанию, используемая парсером. Она позволяет значениям содержать строки формата, которые ссылаются на другие значения в том же разделе или значения в специальном разделе по умолчанию. Дополнительные значения по умолчанию могут быть предоставлены при инициализации.

[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures

[Escape]
# использовать '%%' для экранирования знака '%' 
# '%' - единственный символ, который должен быть экранирован
gain: 80%%

В приведенном выше примере ConfigParser с интерполяцией, установленной в BasicInterpolation(), приведет %(home_dir) в данном случае к значению home_dir = '/Users', а значение %(my_dir)s в действительности разрешается в /Users/lumberjack. Все интерполяции выполняются по требованию, поэтому ключи, используемые в цепочке ссылок, не нужно указывать в каком-либо определенном порядке в файле конфигурации.

Если для интерполяции задано значение None, то анализатор просто вернет %(my_dir)s как /Pictures в качестве значения ключа my_pictures и %(home_dir)s к /lumberjack в качестве значения ключа my_dir.

Расширенная интерполяция.

configparser.ExtendedInterpolation:

Альтернативный обработчик для интерполяции, который реализует более продвинутый синтаксис, используемый например как в Buildout.

Расширенная интерполяция использует ${section: option} для обозначения значения из стороннего раздела. Интерполяция может охватывать несколько уровней. Для удобства, если значение section: part не указано, то по умолчанию используется интерполяция текущего раздела и возможно, значения по умолчанию из специального раздела.

Например конфигурация, указанная выше с базовой интерполяцией, будет выглядеть так с расширенной интерполяцией:

[Paths]
home_dir: /Users
my_dir: ${home_dir}/lumberjack
my_pictures: ${my_dir}/Pictures

[Escape]
# используйте $$ для экранирования знака $
# $ - единственный символ, который должен быть экранирован
cost: $$80

Также можно получить значения из других разделов:

[Common]
home_dir: /Users
library_dir: /Library
system_dir: /System
macports_dir: /opt/local

[Frameworks]
Python: 3.2
path: ${Common:system_dir}/Library/Frameworks/

[Arthur]
nickname: Two Sheds
last_name: Jackson
my_dir: ${Common:home_dir}/twosheds
my_pictures: ${my_dir}/Pictures
python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}