同じ名前のセクションを単純にマージする(最新のセクションが優先される)場合は、strict=False
オプションをコンストラクター(Python 3.2で追加)に渡すだけです。dict.update()
重複するセクションがにマージされると、効果的に動作を取得できます。
Config = configparser.ConfigParser(strict=False)
ただし、OPのサンプルデータから、データの損失を回避するために、同じ名前のセクションを分離しておく必要があることは明らかです。ConfigParser
読み取ったセクションを辞書に格納するため、同じ名前の複数のセクションを処理することはできません。幸い、コンストラクターは、dict_type
辞書のような別のオブジェクトを指定できる引数を受け入れます。これを使用して、同じ名前のセクションをサポートできます。これは、セクション名が以前に見られたときに一意の番号を追加することによってセクション名を壊す大まかな解決策です。
from collections import OrderedDict
class multidict(OrderedDict):
_unique = 0 # class variable
def __setitem__(self, key, val):
if isinstance(val, dict):
self._unique += 1
key += str(self._unique)
OrderedDict.__setitem__(self, key, val)
Config = configparser.ConfigParser(defaults=None, dict_type=multidict, strict=False)
少しの作業で、よりクリーンなソリューションを構築できるはずです。