ConfigParser读取大写键并将其设为小写

Man*_*ndy 56 python python-2.7

我发现了一个有趣的观察.我写了一个配置文件读取程序,

import ConfigParser
class  ConfReader(object):
    ConfMap = dict()

    def __init__(self):
        self.config = ConfigParser.ConfigParser()
        self.config.read('./Config.ini')
        self.__loadConfigMap()

    def __loadConfigMap(self):
        for sec in self.config.sections():
            for key,value in self.config.items(sec):
                print 'key = ', key, 'Value = ', value
                keyDict = str(sec) + '_' + str(key)
                print 'keyDict = ' + keyDict  
                self.ConfMap[keyDict] = value

    def getValue(self, key):
        value = ''
        try:
            print ' Key = ', key
            value = self.ConfMap[key] 
        except KeyError as KE:
            print 'Key', KE , ' didn\'t found in configuration.'
    return value

class MyConfReader(object):
    objConfReader = ConfReader()

def main():
     print MyConfReader().objConfReader.getValue('DB2.poolsize')
     print MyConfReader().objConfReader.getValue('DB_NAME')

if __name__=='__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我的Config.ini文件看起来像,

[DB]
HOST_NAME=localhost
NAME=temp
USER_NAME=postgres
PASSWORD=mandy
Run Code Online (Sandbox Code Playgroud)

__loadConfigMap()工作得很好.但是在阅读键和值时,它会使键成为小写.我不明白原因.任何人都可以解释为什么会这样吗?

Mar*_*ers 101

ConfigParser.ConfigParser()是一个子类ConfigParser.RawConfigParser(),它被记录为以这种方式运行:

所有选项名称都通过该optionxform()方法传递.其默认实现将选项名称转换为小写.

这是因为该模块解析了Windows INI文件,这些文件预计会被区分大小写.

您可以通过替换RawConfigParser.optionxform()函数来禁用此行为:

self.config = ConfigParser.ConfigParser()
self.config.optionxform = str
Run Code Online (Sandbox Code Playgroud)

str 通过选项不变.

  • 感谢您解释**为什么**`ConfigParser`正在将密钥转换为小写. (6认同)