如何在ConfigParser中保留大小写?

116 投票
5 回答
48974 浏览
提问于 2025-04-15 15:18

我尝试使用Python的ConfigParser模块来保存设置。对我的应用来说,保持每个部分名称的大小写非常重要。文档提到将str()传递给ConfigParser.optionxform()可以实现这个目的,但对我来说并没有效果。所有的名称都是小写的。我是不是漏掉了什么?

<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz

这是我得到的Python伪代码:

import ConfigParser,os

def get_config():
   config = ConfigParser.ConfigParser()
   config.optionxform(str())
    try:
        config.read(os.path.expanduser('~/.myrc'))
        return config
    except Exception, e:
        log.error(e)

c = get_config()  
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]

5 个回答

17

在你的代码中添加:

config.optionxform = lambda option: option  # preserve case for letters
66

对我来说,在创建对象后立刻设置 optionxform 是有效的。

config = ConfigParser.RawConfigParser()
config.optionxform = str
136

这段文档有点让人摸不着头脑。他们的意思是:

import ConfigParser, os
def get_config():
    config = ConfigParser.ConfigParser()
    config.optionxform=str
    try:
        config.read(os.path.expanduser('~/.myrc'))
        return config
    except Exception, e:
        log.error(e)

c = get_config()  
print c.options('rules')

也就是说,要重写optionxform,而不是去调用它;重写可以在子类中进行,也可以在实例中进行。在重写的时候,要把它设置为一个函数(而不是调用函数后的结果)。

我现在已经把这个问题报告为一个bug,并且这个问题已经被修复了。

撰写回答