树的保存与读取(pickle模块)
为什么先说读取呢?
。。。
做项目没有保存,做什么都是一次性的!
import pickle
def store_tree(input_tree, filename):
# 序列化树结构,存入文件
fw = open(filename, 'wb')
pickle.dump(input_tree, fw, 0)
fw.close()
def grab_tree(filename):
# 将文件转换为树结构到内存
fr = open(filename, 'rb')
return pickle.load(fr)
wb:二进制写模式
rb:二进制读模式
open的时候有4中模式,默认是第三模式,这里要想正确读出只能选择0模式,即ASCII模式。
0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;
2:2.3版本引入的新二进制协议,较以前的更高效。
其中协议0和1兼容老版本的python。protocol默认值为3。
这里用0模式
例:
tree = Tree()
tree.create_node('root', 'root')
tree.create_node('child_1', 'child_1', parent = 'root')
tree.create_node('child_3', 'child_3', parent = 'root')
tree.create_node('child_3', 'child_4', parent = 'root')
tree.create_node('child_2', 'child_2', parent = 'child_3')
print('----------')
tree.show()
print('----------')
store_tree(tree, 'gjl_tree')
tree_ = grab_tree('gjl_tree')
tree_.show()
print('----------')
结果:
----------
root
├── child_1
├── child_3
│ └── child_2
└── child_3
----------
root
├── child_1
├── child_3
│ └── child_2
└── child_3
----------