解析现有的配置文件

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)

从那里你可以根据需要变得更复杂(从字符串中单独解析数字,查找特定的字段名称等).以上是非常通用的,只是查找字符串(定义为除"{"和"}"之外的任何非空格字符)和{}分隔的字符串列表.