1. ホーム
  2. python

[解決済み] ConfigParserは大文字のキーを読み込んで小文字にします。

2023-06-16 23:23:39

質問

面白いことがわかりました。 私は1つの設定ファイル読み込みプログラムを次のように書きました。

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 は、オプションを変更せずに通過します。