2013-03-12 6 views
3

Кто-нибудь реализовал симпатичную печать (предпочтительно используя встроенный модуль Python pprint) из синтаксических обработок, выводимых из PyParsing, предпочтительно с отступом и выравниванием?Pretty-Printing PyParsing Trees

+0

'pprint.pprint' pretty-prints dict, list и т. Д. Самый простой способ - преобразовать дерево синтаксического анализа в структуру list/dict. Это возможно? – hughdbrown

+2

Используйте 'asList':' results = parseString (s); pprint (results.asList()) '. Если вы определили имена результатов, вы можете использовать 'asDict()' или даже просто 'dump()'. – PaulMcG

+0

@PaulMcGuire: Отлично! Это делает это для меня пока. –

ответ

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 просто добавить дополнительный обработчик энкодер для определенного типа данных.