1 序列化的概念:
序列化是指把内存当中的数据转换成bytes类型,使其能够存入硬盘或者通过网络进行传输
2 序列化的应用场景:
一个简单的例子就是我们打游戏的时候,如果碰到急事,需要暂停,或者关闭游戏,等事情解决完之后再继续游戏。这样就不用重新开始玩。这时就需要我们把当前游戏中相关的数据存储在硬盘中,等下次游戏开始的时候再从硬盘中把这些数据读取出来。
3 pickle模块
import pickle
dic = {
"name":"zhangsan",
"age":22
}
li = ["a",23,"asdf"]
d_dic = pickle.dumps(dic) # dumps方法会将数据转换为bytes类型
print(d_dic)
print(type(d_dic))
# 结果为
# b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00zhangsanq\x02X\x03\x00\x00\x00ageq\x03K\x16u.'
# <class 'bytes'>
print(pickle.loads(d_dic)) # loads方法会将序列化的数据反序列化
# 结果为 {'name': 'zhangsan', 'age': 22}
# dump方法将数据序列化并写入到文件中
f = open("pic.pk","wb")
pickle.dump(dic,f)
pickle.dump(li,f)
#load方法将数据加载到内存
f = open("pic.pk","rb")
d = pickle.load(f)
l = pickle.load(f)
print(d) # {'name': 'zhangsan', 'age': 22}
print(l) # ['a', 23, 'asdf']
注意:之前dump了几次,后面也要 load几次,数据是先进先出
4 json模块
import json
dic = {
"name":"zhangsan",
"age":22
}
li = ["a",23,"asdf"]
# json的dump方法是将数据转化为字符串
j_dic = json.dumps(dic)
print(type(j_dic)) # <class 'str'>
print(j_dic) # {"name": "zhangsan", "age": 22}
d = json.loads(j_dic)
print(type(d)) # <class 'dict'>
print(d) # {"name": "zhangsan", "age": 22}
# dump方法将数据序列化并写入到文件中
f = open("js.json","w")
json.dump(dic,f)
f = open("js.json","r")
d = json.load(f)
print(d) # {'name': 'zhangsan', 'age': 22}
print(type(d)) # <class 'dict'>
注意:json进行dump的时候,可以进行多次,但最好只进行一次,dump完后,在进行load时,如果dump了多次则程序会报错。所以推荐进行一次dump
5 pickle和json的区别
pickle:
优点:是Python独有的,支持Python中的所有数据类型
缺点:只能在Python中使用,占用内存较大
json:
优点:支持多语言,不同的编程语言之间可以通过json进行数据交换,占用内存小
缺点:只能存储int/string/list/dict等常用的数据类型