ConfigParserを使用して、次のように構成ファイルからデータをロードしています。
test.conf:
[myfiles]
fileone: %(datadir)s/somefile.foo
filetwo: %(datadir)s/nudderfile.foo
load.py:
import ConfigParser
config = ConfigParser.ConfigParser({'datadir': '/tmp'})
config.read('test.conf')
print config.items('myfiles')
print config.get('myfiles', 'datadir')
出力:
$ python load.py
[('datadir', '/tmp'), ('filetwo', '/tmp/nudderfile.foo'), ('fileone', '/tmp/somefile.foo')]
/tmp
('datadir', '/tmp')
変数置換のデフォルトがの一部として表示されていることに驚いています。構成ファイルの値であるかのように戻りますitems()
。.get()
この動作は予想されますか?デフォルトのディクショナリ値を取得せずに単純に反復できるようにするための回避策は.items()
ありますが、それでもマジック補間を使用しますか?
参照:http ://docs.python.org/library/configparser.html
ありがとう!
更新:これは予想される動作であることが指摘されています。デフォルトは、構成ファイル内の他の名前と値のペアとまったく同じです。同様に、構成ファイルの名前と値のペアも「魔法の補間」に使用できるため、次のように定義します。
foo: bar
zap: %(foo)snowl
取得します[... ('zap': 'barnowl')]
それはかなりきちんとしていますが、私が達成したいことを達成できるかどうかまだ疑問に思っています。デフォルトなしで、変数の補間を使用して、構成ファイルの名前と値のペアを繰り返し処理します。
{basedir: '/foo/bar'}
私の特定のシナリオは次のとおりです。特定のファイルへの絶対パスはインストールによって異なるため、構成オブジェクトをのようなもので初期化したかったのです。次に、その構成オブジェクトをに渡して、他のさまざまなクラスにファイルを反復処理させる必要があります。構成を読み取るすべてのクラスが、特定のデフォルトで初期化されていること、および実際のファイルではないため、それらを無視する必要があることを認識している必要はありません。これは可能ですか?.item()と.get()からデフォルトを非表示にする方法はありますが、それでも補間はありますか?ありがとう!