ao-log

インフラ系ITエンジニアのメモ帳です。

python 2.6 の ConfigParser で順序付き辞書を使う方法

ConfiParser で順序付き辞書を使いたかったのに、少しはまってしまったので、メモ。

Python では、言語に標準で、次のような設定ファイルを解析して、設定内容を読み込める便利なモジュールがあります。ConfigParser です。

[section]
key_001 = value_001
key_002 = value_002

[section] の設定内容をリストで受け取る場合は、次のように書きます。

import ConfigParser

config = ConfigParser.ConfigParser()
config.readfp(open("test.cfg"))
print config.items("section")

実行すると、次のようにリストで結果を得られます。

[('key_001', 'value_001'), ('key_002', 'value_002')]

v2.7 の場合、デフォルトの dict_type は collections.OrderedDict を使います。そのため、特に意識しなくても、得られるリストの内容は設定ファイルに上から読んだものになります。ただ、v2.6 の場合は、順序を記憶しない辞書なので、リストを得たとき順番の情報が消えてしまいます。

v2.6 での対応としては、少々荒っぽいやり方ですが、v2.7 系のソースを入手し、ConfigParser と collections を v2.7 のものを import することで、順序つきの辞書を使えるようになります。他にも、v2.6 の ConfigParser を継承したクラスを作って処理をラッピングするなど、色々と手はありそうです。