学习目标:
学会使用pickle工具包,对python数据序列化和反序列化
学习内容:
1、 序列化和反序列化
2、 pickle工具包
3、 序列化方法dump()
4、 反序列化方法load()
分步学习:
1、 为什么要进行序列化
数据可以存储在电脑内存,硬盘文件,数据库中,其中将数据存储到文件中会用到序列化的知识,好处是待存储数据的类型信息,数据信息,都会保存,通过反序列化方法就可以快速还原数据了。
2、pickle工具包
pickle工具包是python特有的,提供了一个简单的序列化(持久化)功能。可以将数据对象(列表,字典,集合,类等)以文件的形式存放在磁盘上。
当然,pickle序列化后的数据,可读性差,人一般无法识别。如下所示,你猜你大胆的猜,存储的是什么数据?
(lp0
(lp1
(V
p2
I95
tp3
aa(lp4
(g2
I14
tp5
a(V#
p6
I5
tp7
a(g2
I70
tp8
ag7
a(g2
I1
tp9
aa.
3、 dump()序列化
(1)序列化列表和元组基础数据类型,需要注意事项:
- 文件格式需要用wb,以二进制写方式打开文件
- dump(数据信息,打开文件对象,0),第三个参数0,可以防止ttt.pkl文件中存储的数据乱码
s = [[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]]
f = open("ttt.pkl","wb")
pickle.dump(s, f, 0)
(2)序列化对象
class People():
def __init__(self):
self.name="Sunny"
self.age = "12"
def __str__(self):
return "name:"+self.name+",age="+self.age
p = People()
print(str(p))
f = open("ttt.pkl","wb")
pickle.dump(p, f, 0)
4、load()反序列化
f = open("ttt.pkl","rb")
data = pickle.load(f)
print(type(data),data.age,data.name)
执行结果
D:\Python\Python37-32\python.exe D:/WORKSPACE/python/test.py
name:Sunny,age=12
<class '__main__.People'> 12 Sunny