ConfigParser считывает ключи капитала и делает их нижним регистром
Я нашел одно интересное наблюдение.
Я написал одну программу чтения файла конфигурации, как,
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()
И мой файл Config.ini выглядит,
[DB]
HOST_NAME=localhost
NAME=temp
USER_NAME=postgres
PASSWORD=mandy
__loadConfigMap() работает просто отлично. Но, читая ключ и значения, он делает клавиши в нижнем регистре. Я не понял причины. Может кто-нибудь объяснить, почему это так?
Ответы
Ответ 1
ConfigParser.ConfigParser()
является подклассом ConfigParser.RawConfigParser()
, который документирован таким образом:
Все имена опций передаются через метод optionxform()
. Его реализация по умолчанию преобразует имена опций в нижний регистр.
Это потому, что этот модуль анализирует файлы Windows INI, которые, как ожидается, будут анализироваться без учета регистра.
Вы можете отключить это поведение, заменив RawConfigParser.optionxform()
функцию:
self.config = ConfigParser.ConfigParser()
self.config.optionxform = str
str
проходит через параметры без изменений.