【Python】使用pickle实现多叉树的序列化和读取
方法
pickle.dump()
pickle.load()
步骤
首先建立一个多叉树节点类
class Node:
def __init__(self, name):
self.name = name
self.children = []
def insert(self, childNode):
self.children.append(childNode)
建立一个多叉树,结构如下
代码如下:
A = Node('A')
B = Node('B')
C = Node('C')
D = Node('D')
E = Node('E')
F = Node('F')
G = Node('G')
H = Node('H')
A.insert(B)
A.insert(C)
A.insert(D)
B.insert(E)
B.insert(F)
F.insert(G)
F.insert(H)
为了实现多叉树的可视化,写一个递归方法到节点类中
def show(self, level):
print('|--|'*level, self.name)
for eachChild in self.children:
eachChild.show(level+1)
调用方法:
A.show(1)
结果如下:
|--| A
|--||--| B
|--||--||--| E
|--||--||--| F
|--||--||--||--| G
|--||--||--||--| H
|--||--| C
|--||--| D
采用pickle模块实现对多叉树的序列化,首先导包:
import pickle
首先是序列化操作,建立一个文件直接传入一个A节点:
with open('hehe.txt', 'wb') as file:
pickle.dump(A, file)
注意必须是二进制写入。
反序列化方法如下,同样是二进制,用一个变量去接收:
with open('hehe.txt', 'rb') as file:
hehe = pickle.load(file)
把结果show一下:
hehe.show(1)
结果如下:
|--| A
|--||--| B
|--||--||--| E
|--||--||--| F
|--||--||--||--| G
|--||--||--||--| H
|--||--| C
|--||--| D
可以发现采用pickle模块可以直接将节点对象及其子节点一起序列化并存储,非常好用。