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

Тонкая настройка ConfigParser в Python

Продвинутая настройка парсера конфигураций

Более продвинутая настройка парсера INI-файлов `configparser.ConfigParser() может быть достигнута путем переопределения значений по умолчанию этих атрибутов синтаксического анализатора.

Значения по умолчанию определены для классов, поэтому они могут быть переопределены подклассами или назначением атрибута.

Содержание:


ConfigParser.BOOLEAN_STATES:

Атрибут класса ConfigParser.BOOLEAN_STATES содержит словарь строк и их логических результатов, отвечающий за результаты метода config.getboolean().

По умолчанию при использовании метода config.getboolean() парсер конфигурации принимают значения True при следующих значениях строк: '1', 'yes', 'true', 'on' и следующие значения False: '0', 'no', 'false', 'off'. Можно переопределить это, указав пользовательский словарь строк и их логических результатов. Например:

>>> custom = configparser.ConfigParser()
>>> custom['section1'] = {'funky': 'nope'}
>>> custom['section1'].getboolean('funky')
# Traceback (most recent call last):
# ...
# ValueError: Not a boolean: nope
>>> custom.BOOLEAN_STATES = {'sure': True, 'nope': False}
>>> custom['section1'].getboolean('funky')
# False

Другие типичные логические пары включают в себя accept/reject или enabled/disabled.

ConfigParser.optionxform(option):

Метод класса ConfigParser.optionxform() преобразует имена опций при каждой операции чтения, получения или установки. По умолчанию имя преобразуется в нижний регистр. Это также означает, что при записи файла конфигурации все ключи должны быть строчными. Если такое поведение не подходит, то переопределите этот метод. Например:

>>> config = """
... [Section1]
... Key = Value
...
... [Section2]
... AnotherKey = Value
... """
>>> typical = configparser.ConfigParser()
>>> typical.read_string(config)
>>> list(typical['Section1'].keys())
# ['key']
>>> list(typical['Section2'].keys())
# ['anotherkey']
>>> custom = configparser.RawConfigParser()
>>> custom.optionxform = lambda option: option
>>> custom.read_string(config)
>>> list(custom['Section1'].keys())
# ['Key']
>>> list(custom['Section2'].keys())
# ['AnotherKey']

Примечание. Метод класса ConfigParser.optionxform() преобразует имена параметров в каноническую форму. Это должна быть идемпотентная функция: если имя уже в канонической форме, то оно должно быть возвращено без изменений.

ConfigParser.SECTCRE:

Атрибут класса ConfigParser.SECTCRE представляет собой скомпилированное регулярное выражение, используемое для разбора заголовков разделов. По умолчанию [section] соответствует названию 'section'. Пробел считается частью имени раздела, поэтому [ larch ] будет читаться как раздел имени ' larch '. Если такое поведение не подходит, то переопределите этот атрибут. Например:

>>> import re
>>> config = """
... [Section 1]
... option = value
...
... [  Section 2  ]
... another = val
... """
>>> typical = configparser.ConfigParser()
>>> typical.read_string(config)
>>> typical.sections()
# ['Section 1', '  Section 2  ']
>>> custom = configparser.ConfigParser()
>>> custom.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
>>> custom.read_string(config)
>>> custom.sections()
# ['Section 1', 'Section 2']

Примечание. Хотя объекты ConfigParser также используют атрибут config.OPTCRE для разбора заголовков разделов, переопределять его не рекомендуется, так как это может повлиять на параметры конструктора allow_no_value и разделители.