【问题标题】:How to get case-sensitivity in Section names?如何在部分名称中区分大小写?
【发布时间】:2014-10-03 13:19:17
【问题描述】:

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

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

我的问题是我的部分名称应该被视为不区分大小写,但ConfigParser 对于 sections 是区分大小写的(而对于 options 可能是不区分大小写的使用optionxform())

有人可以帮助我吗?谢谢

【问题讨论】:

    标签: python case-sensitive configparser


    【解决方案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*\]')
    

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2016-05-15
      • 2014-02-17
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多