python库“anytree”中的Findall()搜索功能返回NameError:“Findall”未定义

2024-04-28 05:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python中的anytree库进行一个项目,该项目利用了库的树功能。我希望能够在树中搜索,但文档中显示的搜索命令不起作用

这是一个直接来自此处文档的示例树:https://anytree.readthedocs.io/en/latest/api/anytree.search.html#anytree.search.findall

>>> from anytree import Node, RenderTree, AsciiStyle
>>> f = Node("f")
>>> b = Node("b", parent=f)
>>> a = Node("a", parent=b)
>>> d = Node("d", parent=b)
>>> c = Node("c", parent=d)
>>> e = Node("e", parent=d)
>>> g = Node("g", parent=f)
>>> i = Node("i", parent=g)
>>> h = Node("h", parent=i)
>>> print(RenderTree(f, style=AsciiStyle()).by_attr())
f
|-- b
|   |-- a
|   +-- d
|       |-- c
|       +-- e
+-- g
    +-- i
        +-- h
>>> findall(f, filter_=lambda node: node.name in ("a", "b"))
(Node('/f/b'), Node('/f/b/a'))
>>> findall(f, filter_=lambda node: d in node.path)
(Node('/f/b/d'), Node('/f/b/d/c'), Node('/f/b/d/e'))

当我在空闲状态下复制这段代码时,会出现以下错误:

>>> from anytree import Node, RenderTree, AsciiStyle
>>> f = Node("f")
>>> b = Node("b", parent=f)
>>> a = Node("a", parent=b)
>>> d = Node("d", parent=b)
>>> c = Node("c", parent=d)
>>> e = Node("e", parent=d)
>>> g = Node("g", parent=f)
>>> i = Node("i", parent=g)
>>> h = Node("h", parent=i)
>>> findall(f, filter_=lambda node: node.name in ("a", "b"))
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    findall(f, filter_=lambda node: node.name in ("a", "b"))
NameError: name 'findall' is not defined

请让我知道我是否需要导入其他内容,或者是否有任何其他方法通过anytree搜索树


Tags: 项目lambdanameinfrom文档nodesearch
2条回答

您必须导入搜索模块

from anytree import Node, RenderTree, AsciiStyle, search

result = search.findall(f, filter_=lambda node: node.name in ("a", "b"))

print(result) // (Node('/f/b'), Node('/f/b/a')

您尚未导入该函数。解决方案可以是为该函数添加导入

from anytree import Node, RenderTree, AsciiStyle, findall

或者,您可以使用

from anytree import *
f = Node("f")
findall(f, ...)

或者您可以像这样导入模块,但是您需要在该模块的所有内容前面添加anytree.

import anytree
f = anytree.Node("f")
anytree.findall(f)

相关问题 更多 >