Ben*_*bin 4 python parsing config
我有一个以下形式的配置文件:
protocol sample_thread {
{ AUTOSTART 0 }
{ BITMAP thread.gif }
{ COORDS {0 0} }
{ DATAFORMAT {
{ TYPE hl7 }
{ PREPROCS {
{ ARGS {{}} }
{ PROCS sample_proc }
} }
} }
}
Run Code Online (Sandbox Code Playgroud)
真实文件可能没有这些确切的字段,我宁愿在解析之前不必描述数据的结构是解析器.
我已经找了其他配置文件解析器,但我发现没有一个能够接受这种语法的文件.
我正在寻找一个可以解析这样的文件的模块,有什么建议吗?
如果有人好奇,有问题的文件是由Quovadx Cloverleaf生成的.
Bri*_*ian 11
对于像这样的快速简单的解析,pyparsing非常方便.最低限度的是:
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)
Run Code Online (Sandbox Code Playgroud)
用它作为:
>>> toplevel.parseString(text)
['protocol', 'sample_thread', [['AUTOSTART', '0'], ['BITMAP', 'thread.gif'],
['COORDS', ['0', '0']], ['DATAFORMAT', [['TYPE', 'hl7'], ['PREPROCS',
[['ARGS', [[]]], ['PROCS', 'sample_proc']]]]]]]
Run Code Online (Sandbox Code Playgroud)
从那里你可以根据需要变得更复杂(从字符串中单独解析数字,查找特定的字段名称等).以上是非常通用的,只是查找字符串(定义为除"{"和"}"之外的任何非空格字符)和{}分隔的字符串列表.