ConfigParser leest hoofdletters en maakt ze in kleine letters

Ik heb een interessante observatie gevonden.
Ik had een configuratiebestand-leesprogramma geschreven als,

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()

En mijn Config.ini-bestand ziet eruit als,

[DB]
HOST_NAME=localhost
NAME=temp
USER_NAME=postgres
PASSWORD=mandy

De __loadConfigMap() werkt prima. Maar tijdens het lezen van de sleutel en waarden, worden de sleutels in kleine letters gemaakt. Ik begreep de reden niet. Kan iemand uitleggen waarom dit zo is?


Antwoord 1, autoriteit 100%

ConfigParser.ConfigParser()is een subklasse van ConfigParser.RawConfigParser(), waarvan is gedocumenteerd dat het zich op deze manier gedraagt:

Alle optienamen worden doorgegeven via de optionxform()methode. De standaardimplementatie zet optienamen om in kleine letters.

Dat komt omdat deze module Windows INI-bestanden parseert die naar verwachting hoofdletterongevoelig zullen worden geparseerd.

U kunt dit gedrag uitschakelen door de RawConfigParser.optionxform()functie:

self.config = ConfigParser.ConfigParser()
self.config.optionxform = str

strdoorloopt de opties ongewijzigd.

Other episodes