Python中的序列化模块pickle和json

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等常用的数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值