Programing

ConfigParser는 대문자 키를 읽고 소문자로 만듭니다.

crosscheck 2021. 1. 7. 19:40
반응형

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 ()은 잘 작동합니다. 그러나 키와 값을 읽는 동안 키를 소문자로 만듭니다. 이유를 이해하지 못했습니다. 그 이유를 설명해 주시겠습니까?


ConfigParser.ConfigParser()다음과 같이 ConfigParser.RawConfigParser()작동하는 것으로 문서화 된 의 하위 클래스입니다 .

모든 옵션 이름은 optionxform()메서드를 통해 전달됩니다 . 기본 구현은 옵션 이름을 소문자로 변환합니다.

이 모듈은 대소 문자를 구분하지 않고 구문 분석 될 것으로 예상되는 Windows INI 파일을 구문 분석하기 때문입니다.

RawConfigParser.optionxform()함수 를 대체하여이 동작을 비활성화 할 수 있습니다 .

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

str 변경되지 않은 옵션을 통과합니다.

ReferenceURL : https://stackoverflow.com/questions/19359556/configparser-reads-capital-keys-and-make-them-lower-case

반응형