【问题标题】:ConfigParser reads capital keys and make them lower caseConfigParser 读取大写键并使它们小写
【发布时间】:2013-10-21 23:29:03
【问题描述】:

我发现了一个有趣的观察结果。 我写了一个配置文件读取程序,

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() 工作得很好。但是在读取键和值时,它会使键小写。我不明白原因。谁能解释一下为什么会这样?

【问题讨论】:

标签: python python-2.7


【解决方案1】:

ConfigParser.ConfigParser()ConfigParser.RawConfigParser() 的子类,据记录它的行为方式如下:

所有选项名称都通过optionxform() 方法传递。它的默认实现将选项名称转换为小写。

这是因为此模块解析 Windows INI 文件,这些文件预计会不区分大小写。

您可以通过替换 RawConfigParser.optionxform() function 来禁用此行为:

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

str 通过选项不变。

【讨论】:

  • @Martijin 这意味着我需要替换 ConfigParser.RawConfigParser() 的代码。好的,谢谢你的解释。为我工作。
  • 感谢您解释为什么 ConfigParser 正在将密钥转换为小写。
  • 使用此选项,我看到为键保留了大写字母。在我的 ini 文件中,键和值之间没有任何空格。但是,配置解析器在等于之前和之后添加一个空格。例如:如果我的 ini 文件中有 KEY=value,则将其更改为 KEY = value。有什么办法可以避免这些多余的空格?
  • 我在这里找到了空间问题的解决方案:stackoverflow.com/questions/14021135/…
猜你喜欢
  • 2011-09-25
  • 2010-12-09
  • 2021-01-11
  • 2011-10-14
  • 2017-10-20
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多