Как добиться учета регистра в именах разделов?

У меня есть приложение win32, доступ к которому пользователи получают через RDP-доступ. У каждого пользователя есть свой user_app.ini файл.

Когда я обновляю свое приложение на сервере RDP, мне иногда нужно создавать/изменять записи в файле user_app.ini каждого пользователя. Я написал скрипт Python для обработки задания, использующего некоторый файл upgrade.ini для обновления всех файлов user_app.ini с помощью модуля ConfigParser.

Моя проблема в том, что мои имена разделов должны рассматриваться как нечувствительные к регистру, но ConfigParser чувствителен к регистру в отношении разделов (в то время как он может быть нечувствительным к регистру в отношении options с использованием optionxform() )

Кто-нибудь может мне помочь ? Спасибо


person Sun Wukong    schedule 03.10.2014    source источник


Ответы (1)


Существует атрибут SECTCRE, который вы можете переопределить. Это должно определить регулярное выражение, которое будет соответствовать имени раздела.

Вместо регулярного выражения вы можете передать любой объект, у которого есть метод match, который принимает строку и возвращает объект, у которого есть метод group, который принимает строку 'header' в качестве параметра.

Например:

class FakeRe:
    def __init__(self, regex):
        self.regex = regex
    def match(self, text):
        m = self.regex.match(text)
        if m:
            return FakeMatch(m)
        return None

class FakeMatch:
    def __init__(self, match):
        self.match = match
    def group(self, name):
        return self.match.group(name).lower()

Затем вы можете установить этот атрибут при создании парсера:

config = ConfigParser()
config.SECTCRE = FakeRe(re.compile(r'\[\s*(?P<header>some regex here)\s*\]')

и этот синтаксический анализатор должен рассматривать все имена разделов как строчные.

Возможно, вам придется немного изменить код, в зависимости от ваших конкретных потребностей.

person Bakuriu    schedule 03.10.2014