["python","python-2.7"]
ConfigParser reads capital keys and make them lower case

I found one interesting observation. I had written one config file read program as, 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() And my Config.ini file looks like, [DB] HOST_NAME=localhost NAME=temp USER_NAME=postgres PASSWORD=mandy The __loadConfigMap() works just fine. But while reading the key and values, it is making the keys lower case. I didn't understand the reason. Can any one please explain why it is so?
ConfigParser.ConfigParser() is documented to behave this way, in the Mapping Protocol Access section: By default, all keys in sections are accessible in a case-insensitive manner. E.g. for option in parser["section"] yields only optionxform’ed option key names. This means lowercased keys by default. That's because this module parses Windows INI files which are expected to be parsed case-insensitively. You can disable this behaviour by replacing the ConfigParser.optionxform() function: self.config = ConfigParser.ConfigParser() self.config.optionxform = str str passes through the options unchanged.