このような構成ファイルを Python3 で解析する方法はありますか?
path = .MyAppData
prefer = newer
path = Dokumente
私を責めないでください。;) 私は、このような設定ファイルを生成するソフトウェアをビルドしませんでした。しかし、それらはその特別な文脈では理にかなっています。
私はPython3について知っConfigParser
てconfigobj
いますが、これを行う方法がわかりません。
このような構成ファイルを Python3 で解析する方法はありますか?
path = .MyAppData
prefer = newer
path = Dokumente
私を責めないでください。;) 私は、このような設定ファイルを生成するソフトウェアをビルドしませんでした。しかし、それらはその特別な文脈では理にかなっています。
私はPython3について知っConfigParser
てconfigobj
いますが、これを行う方法がわかりません。
初期化子は、重複を許可する引数をConfigParser
サポートしています。strict=False
しかし、その場合に保持される値は、私が知る限り、ドキュメントには記載されていません。
簡単な解決策の 1 つは、行を自分で辞書に変換することです。
In [1]: txt = '''path = .MyAppData
...: prefer = newer
...: path = Dokumente'''
In [2]: txt.splitlines()
Out[2]: ['path = .MyAppData', 'prefer = newer', 'path = Dokumente']
(テキストを複数の行に分割した後、コメントや空の行をフィルターで除外したい場合があります。)
In [3]: [ln.split('=') for ln in txt.splitlines()]
Out[3]: [['path ', ' .MyAppData'], ['prefer ', ' newer'], ['path ', ' Dokumente']]
In [4]: vars = [ln.split('=') for ln in txt.splitlines()]
(この時点で、分割が成功したことを示す、長さ 2 のリストのみが含まれるように、内側のリストにフィルターを追加することをお勧めします。)
In [5]: {a.strip(): b.strip() for a, b in vars}
Out[5]: {'path': 'Dokumente', 'prefer': 'newer'}
dict 内包表記 ([5]) では、後の代入は前の代入を上書きします。
もちろん、 の場合prefer = older
、辞書内包表記の前に行を逆にする必要があります。