【问题标题】: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*\]')
并且此解析器应将所有部分名称视为小写。
您可能需要稍微调整一下代码,具体取决于您的具体需求。