使用pyparsing解析配置文件

时间:2013-05-09 17:26:57

标签: python parsing pyparsing

我正在尝试使用pyparsing来解析以下格式的配置文件

x = "/user/test"
y = 3

这是我的代码段

ParserElement.defaultWhitespaceChars = (" \t")
END = StringEnd()
NL = LineEnd().suppress()
assignment = Literal('=')

key_str = CharsNotIn("=")
value_str = Group(~assignment + restOfLine)

line = Group(key_str + assignment + value_str)
lines = ZeroOrMore(line)
lines.ignore(NL)

text = """
y = 3
x = 2
"""

我从parseFile获得的输出告诉我它只解析第一行。有人可以帮我找出我做错了吗?

1 个答案:

答案 0 :(得分:2)

看起来你走在正确的轨道上。当你将text实际传递给语法时,也许你做错了什么。在代码中添加以下行

print lines.parseString(text)

给出预期的输出

[['y ', '=', [' 3']], ['x ', '=', [' 2']]]

顺便说一下,通常你想要在解析时保留空白。代币通常是唯一重要的东西。这是我解析你的例子的方式:

EOL = LineEnd().suppress()
EQ  = Literal("=").suppress()
val = Word(alphanums)
line = Group(val('key') + EQ + val('val') + EOL)
grammar = OneOrMore(line)

for x in grammar.parseString(text):
    print x.dump()

这种情况下的输出更好

['y', '3']
- key: y
- val: 3
['x', '2']
- key: x
- val: 2
相关问题