2017-01-13 21 views
0

iniファイル:のConfigParserは重複してすべてのキーを取得

[main] 
key_1=1 
key_2=2 
key_1=3 

のPython:

config_parser = ConfigParser() 
config_parser.optionxform = str 
config_parser.read('config.ini') 
for section in config_parser.sections(): 
    for key in dict(config_parser.items(section)): 
     print key 

結果:

key_1 
key_2 

期待される結果:

key_1 
key_2 
key_1 

どのようにそのような結果を達成するには?

答えて

1

これは、Python 2のconfigパーサーの動作の問題です。キーと値のペアは辞書に変換されます。つまり、各キーは一意でなければなりません。 複数のキーがある場合、「最後の値が勝ちます」。 Pythonの3.5で、あなたの例を試し

、このエラーメッセージを表示します。

DuplicateOptionError: While reading from 'config.ini' [line 4]: 
option 'key_1' in section 'main' already exists 

だから、同じキーを複数回使用しないでください。

幸いなことに、ちょうどPythonの2のためのバックポートがあります:

pip install configparser 

このライブラリは、Python 2.6から3.5へのPython 3.5から更新configparserをもたらします。

さて、このように使用:

ほとんどの実装では、唯一の指定された名前のプロパティを1つ持つサポート

重複名:

from configparser import ConfigParser 

これはWikipediaは重複について言っていることですセクションで。プロパティ名の2番目のオカレンスは中止を引き起こす可能性があり、無視され(そして破棄される)、最初のオカレンス(最初の値は破棄されます)をオーバーライドする可能性があります。一部のプログラムでは、重複プロパティ名を使用して複数値プロパティを実装しています。

複数のセクション宣言を同じ名前で解釈することも異なります。いくつかの実装では、重複セクションは、あたかも連続しているかのように、それらのプロパティを単にマージします。他の人は、INIファイルのいくつかの側面を中止したり、無視したりすることがあります。

+0

私にとっては解決策ではありません。このアクションの主なポイントは、設定ファイルの重複をチェックして表示することです。 – oleksii

+0

重複はエラーとみなされます。間違ったiniファイルをチェックしていますか? –

+0

重複はエラーとみなされます。エラーではありません。 ConfigParserは重複してスキップされ、最後のキーと値のペアのみが表示されます。 (Python 2.7で) – oleksii

関連する問題