107

Python のConfigParserモジュールを使用して設定を保存しようとしました。私のアプリでは、セクション内の各名前の大文字と小文字を区別することが重要です。ドキュメントには、 str() をConfigParser.optionxform( ) に渡すとこれが達成されると記載されていますが、私にとってはうまくいきません。名前はすべて小文字です。何か不足していますか?

<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz

私が得るもののPython疑似コード:

import ConfigParser,os

def get_config():
   config = ConfigParser.ConfigParser()
   config.optionxform(str())
    try:
        config.read(os.path.expanduser('~/.myrc'))
        return config
    except Exception, e:
        log.error(e)

c = get_config()  
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]
4

5 に答える 5

129

ドキュメントは紛らわしいです。彼らが意味することはこれです:

import ConfigParser, os
def get_config():
    config = ConfigParser.ConfigParser()
    config.optionxform=str
    try:
        config.read(os.path.expanduser('~/.myrc'))
        return config
    except Exception, e:
        log.error(e)

c = get_config()  
print c.options('rules')

つまり、optionxform を呼び出す代わりにオーバーライドします。オーバーライドは、サブクラスまたはインスタンスで行うことができます。オーバーライドするときは、(関数呼び出しの結果ではなく) 関数に設定します。

これをバグとして報告し、その後修正されました。

于 2009-10-23T07:33:21.463 に答える
12

コードに追加します。

config.optionxform = lambda option: option  # preserve case for letters
于 2018-08-19T04:09:10.043 に答える