#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
это количество подразделов на этом уровне, которые сразу следуют).