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
str
doorloopt de opties ongewijzigd.