2013-10-14 94 views
41

我發現了一個有趣的觀察結果。 我寫了一個配置文件讀取程序爲,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()的作品就好了。但是,在閱讀關鍵和價值觀的同時,它將使關鍵字成爲小寫字母。我不明白原因。任何人都可以解釋爲什麼是這樣嗎?

+0

[Preserve case in ConfigParser?](https://stackoverflow.com/questions/1611799/preserve-case-in-configparser) –

回答

76

ConfigParser.ConfigParser()ConfigParser.RawConfigParser()一個子類,這是記錄在案,以這種方式運行:

所有選項的名稱通過optionxform()方法傳遞。其默認實現將選項名稱轉換爲小寫。

這是因爲此模塊分析Windows INI文件,這些文件預計將被解析爲不區分大小寫。

您可以通過更換RawConfigParser.optionxform() function禁用此行爲:

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

str通過不變的選項。

+0

@Martijin這意味着我需要替換ConfigParser.RawConfigParser( )。很好,謝謝你的解釋。適用於我。 – Mandy

+1

感謝您解釋**爲什麼**'ConfigParser'將鍵轉換爲小寫。 – abaumg

+0

有了這個選項,我發現保留了CAPITALS的鑰匙。在我的ini文件中,我的鍵和值之間沒有任何空格。但是,配置解析器在等於之前和之後添加一個空格。例如:如果我在我的ini文件中有KEY =值,它將更改爲KEY =值。有沒有辦法避免這些額外的空間? – sridhar249

相關問題