2013-03-12 77 views
3

有沒有人實施漂亮的打印(最好使用Python的內置pprint模塊)從PyParsing輸出的分析樹最好與縮進和對齊?漂亮的印刷PyParsing樹

+0

'pprint.pprint'漂亮字典,列表等。最簡單的方法是將您的分析樹轉換爲列表/字典結構。這可能嗎? – hughdbrown 2013-03-12 17:19:28

+2

使用'asList':'results = parseString(s); pprint(results.asList())'。如果你已經定義了任何結果名稱,你可以使用'asDict()',甚至只使用'dump()'。 – PaulMcG 2013-03-12 17:43:49

+0

@PaulMcGuire:太好了!這對我來說現在。 – 2013-03-12 18:10:49

回答

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錯誤只需添加額外的處理程序,編碼器,用於特定的數據類型。