如何在部分名称中获得区分大小写?

时间:2014-10-03 13:19:17

标签: python case-sensitive configparser

我有一个用户通过RDP访问访问的win32应用程序。 每个用户都有自己的user_app.ini文件。

当我在RDP服务器上升级我的应用程序时,我有时需要在每个用户的user_app.ini文件中创建/修改条目。我编写了一个Python脚本来处理使用upgrade.ini文件更新所有user_app.ini文件的作业,使用ConfigParser模块。

我的问题是我的部分名称应该被视为不区分大小写,但ConfigParser对于部分是区分大小写的(虽然它对选项可能不区分使用optionxform()

有人能帮助我吗?感谢

1 个答案:

答案 0 :(得分:0)

您可以覆盖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*\]')

并且此解析器应将所有节名称视为小写。

您可能需要稍微调整一下代码,具体取决于您的确切需求。