Python anytree:迭代时,知道分支何时关闭
Python anytree: When iterating, know when branch is closed
使用文档中的示例:
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
在我的案例中,树是文件格式的内部表示。在某些时候我想把它写到一个文件中。格式命令每个节点都有一个开始和结束标记。 (类似于 html 或 xml,但它是二进制格式)。
如果一个节点是叶节点,很容易意识到它需要一个关闭标签,但对于更高级别的节点则不需要。使用 PreOrderIter
我需要输出这个:
open f -> f -> open b -> b -> open a -> a -> close a -> open d -> d -> open c -> c -> close c-> open e -> e-> close e -> close d -> close b
等等。问题是如何实现一个子节点都遍历完然后写关闭标签?
不用担心。你仍然可以做类似
的事情
def traverse(node):
print("open " + node + " -> " + node + " -> ")
for child in node.children:
traverse(child)
print("close " + node + " -> ")
使用文档中的示例:
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
在我的案例中,树是文件格式的内部表示。在某些时候我想把它写到一个文件中。格式命令每个节点都有一个开始和结束标记。 (类似于 html 或 xml,但它是二进制格式)。
如果一个节点是叶节点,很容易意识到它需要一个关闭标签,但对于更高级别的节点则不需要。使用 PreOrderIter
我需要输出这个:
open f -> f -> open b -> b -> open a -> a -> close a -> open d -> d -> open c -> c -> close c-> open e -> e-> close e -> close d -> close b
等等。问题是如何实现一个子节点都遍历完然后写关闭标签?
不用担心。你仍然可以做类似
的事情def traverse(node):
print("open " + node + " -> " + node + " -> ")
for child in node.children:
traverse(child)
print("close " + node + " -> ")