使用Python实现树形图和树状结构

2023-04-11 00:00:00 python 结构 树状

实现树形图和树状结构有多种方法,这里介绍两种较为简单的方法。

方法一:使用python模块anytree实现树形图和树状结构。

安装anytree模块:

pip install anytree

anytree模块使用示例:

from anytree import Node, RenderTree

# 创建树状结构
root = Node("pidancode.com")
dir1 = Node("dir1", parent=root)
dir2 = Node("dir2", parent=root)
file1 = Node("file1", parent=dir1)
file2 = Node("file2", parent=dir1)
file3 = Node("file3", parent=dir2)

# 打印树形图
for pre, fill, node in RenderTree(root):
    print("%s%s" % (pre, node.name))

输出结果:

pidancode.com
├── dir1
│   ├── file1
│   └── file2
└── dir2
    └── file3

说明:使用Node函数创建节点,parent参数指定父节点。RenderTree函数可将树形结构打印出来。

方法二:使用python内置库graphviz实现树形图和树状结构。

安装graphviz工具和相关python模块:

sudo apt-get install graphviz
pip install graphviz

使用graphviz模块实现树形图:

from graphviz import Digraph

# 创建树状结构
dot = Digraph(comment='pidancode.com')   # 创建图形对象
dot.node('dir1')
dot.node('dir2')
dot.edge('pidancode.com', 'dir1')
dot.edge('pidancode.com', 'dir2')
dot.node('file1')
dot.node('file2')
dot.node('file3')
dot.edge('dir1', 'file1')
dot.edge('dir1', 'file2')
dot.edge('dir2', 'file3')

# 生成图形
dot.render('pidancode_tree', view=True)

生成的图形为:

pidancode_tree.png

说明:使用Digraph函数创建图形对象,node函数创建节点,edge函数创建边。render函数将对象保存为图片,view参数为True表示生成图片后自动打开,否则需要手动打开。

使用graphviz模块实现树状结构:

from graphviz import Graph

# 创建树状结构
dot = Graph(comment='pidancode.com', format='svg')
dot.node('pidancode.com')
dot.node('dir1')
dot.node('dir2')
dot.node('file1')
dot.node('file2')
dot.node('file3')
dot.edge('pidancode.com', 'dir1')
dot.edge('pidancode.com', 'dir2')
dot.edge('dir1', 'file1')
dot.edge('dir1', 'file2')
dot.edge('dir2', 'file3')

# 生成图形
dot.render('pidancode_tree2', view=True)

生成的图形为:

pidancode_tree2.png

说明:区别在于创建图形对象时指定了format参数为svg,即生成的是树形结构,而非图。其他步骤与树形图相同。

相关文章