Модуль configparser
предоставляет класс configparser.ConfigParser()
, который реализует базовый язык конфигурации, который обеспечивает структуру, аналогичную той, которая содержится в INI-файлах Microsoft Windows. Его можно использовать для написания программ на Python, которые могут быть легко настроены конечными пользователями.
Примечание. Эта библиотека не интерпретирует и не записывает значения типа префиксов, используемые в расширенной версии синтаксиса INI реестра Windows.
Смотрите также:
shlex
, который поддерживает создания Unix-подобных мини-языков, которые могут использоваться в качестве альтернативного формата для файлов конфигурации приложения.json
, реализующий подмножество синтаксиса JavaScript
, которое также можно использовать для этих целей.Возьмем очень простой файл конфигурации, который выглядит следующим образом:
[DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [bitbucket.org] User = hg [topsecret.server.com] Port = 50022 ForwardX11 = no
По сути, файл INI состоит из разделов, каждый из которых содержит ключи со значениями. Классы модуля configparser могут читать и записывать такие файлы. Создадим вышеуказанный файл конфигурации программно.
>>> import configparser >>> config = configparser.ConfigParser() >>> config['DEFAULT'] = {'ServerAliveInterval': '45', ... 'Compression': 'yes', ... 'CompressionLevel': '9'} >>> config['bitbucket.org'] = {} >>> config['bitbucket.org']['User'] = 'hg' >>> config['topsecret.server.com'] = {} >>> topsecret = config['topsecret.server.com'] >>> topsecret['Port'] = '50022' # mutates the parser >>> topsecret['ForwardX11'] = 'no' # same here >>> config['DEFAULT']['ForwardX11'] = 'yes' # сохранение конфигурации >>> with open('example.ini', 'w') as configfile: ... config.write(configfile) ...
Можно заметить, что синтаксический анализатор рассматривает конфигурацию как словарь. Есть различия, но поведение очень близко к тому, что можно ожидать от словаря.
Теперь, прочитаем сохраненный файл конфигурации и изучим данные, которые он содержит.
>>> config = configparser.ConfigParser() >>> config.sections() [] >>> config.read('example.ini') ['example.ini'] >>> config.sections() ['bitbucket.org', 'topsecret.server.com'] >>> 'bitbucket.org' in config True >>> 'bytebong.com' in config False >>> config['bitbucket.org']['User'] 'hg' >>> config['DEFAULT']['Compression'] 'yes' >>> topsecret = config['topsecret.server.com'] >>> topsecret['ForwardX11'] 'no' >>> topsecret['Port'] '50022' >>> for key in config['bitbucket.org']: ... print(key) user compressionlevel serveraliveinterval compression forwardx11 >>> config['bitbucket.org']['ForwardX11'] 'yes'
Как можно увидеть из кода выше, API довольно прост. Единственное волшебство включает раздел DEFAULT
, который предоставляет значения по умолчанию для всех остальных разделов. Обратите внимание, что ключи в разделах не чувствительны к регистру и хранятся в нижнем регистре.