PyParsing树的漂亮打印

3

有没有人使用Python内置的pprint模块实现了PyParsing输出的解析树的漂亮打印,最好带有缩进和对齐。


pprint.pprint 可以将字典、列表等数据类型进行漂亮的打印输出。最简单的方法是将解析树转换为列表/字典结构。这种转换是否可行? - hughdbrown
2
使用 asListresults = parseString(s); pprint(results.asList())。如果您定义了任何结果名称,可以使用 asDict() 或甚至只是 dump() - PaulMcG
@PaulMcGuire:太好了!这对我现在足够了。 - Nordlöw
1个回答

1

你可以使用 JSON 来实现这个。

import json
class PyParseEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, ParseResults):
            x = obj.asDict()
            if x.keys():
                obj = x
            else:
                x = obj.asList()
                if len(x) == 1:
                    obj = x[0]
                else:
                    obj = x 
        else:
            obj = super(PyParseEncoder, self).default(obj)
        return obj

然后

print json.dumps(parseresult, cls=PyParseEncoder, sort_keys=False, indent=2)

如果您从 json.dumps 中获得错误,请为特定数据类型添加额外的编码器处理程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接