Как указать дочерние элементы в anytree и распечатать дерево

#python

#python

Вопрос:

Я пытаюсь напечатать дерево, используя разделы Википедии, но я не могу понять, как указать дочерний узел в anytree. Вот что я пробовал до сих пор,

 import wikipediaapi
from anytree import Node, RenderTree, DoubleStyle
wiki_wiki = wikipediaapi.Wikipedia('en')
main_page = wiki_wiki.page('Stack_Overflow')
sections =  main_page.sections
print(RenderTree(sections))
  

но я получаю эту ошибку,

 Traceback (most recent call last):
  File "so.py", line 6, in <module>
    print(RenderTree(sections))
  File "/usr/lib/python3.4/site-packages/anytree/render.py", line 292, in __str__
    lines = ["%s%r" % (pre, node) for pre, _, node in self]
  File "/usr/lib/python3.4/site-packages/anytree/render.py", line 292, in <listcomp>
    lines = ["%s%r" % (pre, node) for pre, _, node in self]
  File "/usr/lib/python3.4/site-packages/anytree/render.py", line 272, in __next
    children = node.children
AttributeError: 'list' object has no attribute 'children'
  

Я ожидаю этот вывод

 1   History
1.1 Content criteria
1.2 User suspension
2   Statistics
3   Technology
4   Reception
5   See also
6   References
7   External links
  

Я хочу, чтобы это было как можно глубже

Комментарии:

1. всегда используйте общий тег [python] для вопросов на python. Используйте тег, зависящий от версии, если это уместно.

2. @juanpa.arrivillaga Я только начал python, буду иметь в виду на будущее, спасибо

Ответ №1:

Я думаю, вам нужно дважды проверить документы и поработать с одним или двумя примерами в anytree классе. Этот класс работает с собственной древовидной структурой, но sections представляет собой простой список, не подходящий для представления в RenderTree . Я проверил ваше взаимодействие с помощью нескольких простых print команд:

 sections =  main_page.sections
print(type(sections), len(sections))
print("n------------ sections -----------n", sections)
render = RenderTree(sections)
print(type(render))
print("n------------ final print -----------n")
print(render)
print("n------------ final print done -----------n")
  

Вывод:

 <class 'list'> 7

------------ sections -----------
 [Section: History (1):
The website was created
...
]
<class 'anytree.render.RenderTree'>

------------ final print -----------

Traceback (most recent call last):
...
  

Ваш список ввода не имеет Node структуры, которая anytree ожидается.

Комментарии:

1. большое вам спасибо за ваш вклад, в этом случае anytree мне не обязательно, думаю, подойдет любая другая библиотека, но я не уверен, какая именно, если вы знаете, как напечатать структуру, подобную требуемой мной, пожалуйста, поделитесь, я буду продолжать изучать тем временем

2. Ссылки на внешние ресурсы обычно выходят за рамки Stack Overflow — но я не возражаю, что вы задали обычный поток вопроса. Я справился бы с этим, написав свой собственный код синтаксического анализа и извлечения, ища Section: заголовок, level который следует, и очень полезный Subsections(n): счетчик ( n это количество подразделов на этом уровне, которые сразу следуют).