python——pickle模块(dump,load,序列化与反序列化)

pickle模块

python提供了pickle模块来对python对象实现序列化与反序列化。

程序运行的过程中,所有变量都存储在内存中,比如一个字典对象:

dic = {"age":22, "sex":"male", "height":180}

什么是序列化和反序列化

在内存中时,可以随时修改变量的值,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。把变量从内存中变成一个数据流写入磁盘的过程称为序列化,在 Python 中叫 pickling。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的文件对象重新读到内存里并重新构建成python对象的过程称之为反序列化,即 unpickling。

常用方法

  1. bytes_obj = pickle.dumps(python_obj) — 把 python_obj 对象序列化后以 bytes 对象返回,并不写入磁盘文件,返回的 bytes 对象可读性差
import pickle
dic = {"age":22, "sex":"male", "height":180}
obj = pickle.dumps(dic)
print(obj)
b'\x80\x04\x95%\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x03age\x94K\x16\x8c\x03sex\x94\x8c\x04male\x94\x8c\x06height\x94K\xb4u.'
  1. python_obj = pickle.loads(bytes_obj) — 从 bytes 对象中读取一个反序列化对象,并返回其重新构建好的python对象
re_dic = pickle.loads(obj)
print(re_dic)
{'age': 22, 'sex': 'male', 'height': 180}
  1. pickle.dump(python_obj , file) — 序列化python对象,并将结果数据流写入到文件对象file中
# a这个文件是可以不存在的,经过pickle.dump后,a就存储为了一个字节文件,打开看到是乱码
with open("a", mode="wb") as f:
    pickle.dump(dic, f)
  1. python_obj = pickle.load(file) — 反序列化文件对象,将文件中的数据流重新构建为一个Python对象
f = open("a", mode="rb")
w = pickle.load(f)
print(w)
{'age': 22, 'sex': 'male', 'height': 180}
注意:在打开文件对象时。mode一定要为“wb”或者“rb”,因为这是对二进制字节流文件的读写模式!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值