Более продвинутая настройка парсера INI-файлов `configparser.ConfigParser() может быть достигнута путем переопределения значений по умолчанию этих атрибутов синтаксического анализатора.
Значения по умолчанию определены для классов, поэтому они могут быть переопределены подклассами или назначением атрибута.
ConfigParser.BOOLEAN_STATES
,ConfigParser.optionxform()
,ConfigParser.SECTCRE
,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
и разделители.