次のような構成テキストがあります。
text="""
key1 value1
key2 { value1 value2 }
key3 subkey1 {
key1 1
key2 2
key3 {
value1
}
}
BLOBKEY name {
dont {
# comment
parse { me }
}
}
key3 subkey2 {
key1 value1
}
"""
値はプレーン文字列または引用符で囲まれた文字列です。キーは英数字の文字列です。私はそれを前もって知っていてkey2
、key3.subkey1.key4
セットを保持するので、それらのパスを別の方法で扱うことができます。BLOBKEY
同様に、「エスケープされた」構成セクションが含まれることを私は知っています。
目標は、次のような辞書に変換することです。
{'key1': 'value1',
'key2': set(['value1', 'value2']),
'key3': {
'subkey1': {
'key1': 1,
'key2': 2,
'key3': set(['value1']),
},
'subkey2': {
'key1': 'value1'
}
},
'BLOBKEY': {
'name': " dont {\n # comment\n parse { me }\n }\n"
}
}
以下のこのコードは、ネストされたリストの束に分解するのに非常に優れています。
import pyparsing
string = pyparsing.CharsNotIn("{} \t\r\n")
group = pyparsing.Forward()
group << (
pyparsing.Group(pyparsing.Literal("{").suppress() +
pyparsing.ZeroOrMore(group) +
pyparsing.Literal("}").suppress()) |
string
)
toplevel = pyparsing.OneOrMore(group)
pyparsingを使用してPythonで、必要な結果を得る最良の方法は何ですか?