-
序列化/反序列化
将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化
-
pickle
pickle模块实现了用于对Python对象结构进行 序列化 和 反序列化 的二进制协议,与json模块不同的是pickle模块序列化和反序列化的过程分别叫做 pickling 和 unpickling:
- pickling: 是将Python对象转换为字节流的过程;
- unpickling: 是将字节流二进制文件或字节对象转换回Python对象的过程
-
使用示例
-
导入模块
import pickle
-
生成测试数据
obj = {1:'a', 2:'b'}
-
序列化——dumps
将指定的Python对象通过pickle序列化作为bytes对象返回
pickleobj = pickle.dumps(obj) # b'\x80\x03}q\x00(K\x01X\x01\x00\x00\x00aq\x01K\x02X\x01\x00\x00\x00bq\x02u.'
-
反序列化——loads
将通过pickle序列化后得到的字节对象进行反序列化,转换为Python对象并返回
reobj = pickle.loads(pickleobj) # {1: 'a', 2: 'b'}
-
序列化——dump
将指定的Python对象通过pickle序列化后写入打开的文件对象中,等价于
Pickler(file, protocol).dump(obj)
注意与上面dumps的区别
with open('../data/pickle.txt', 'wb') as f: pickle.dump(obj, f) with open('../data/pickle.data', 'wb') as f: # 可以自己指定后缀 pickle.dump(obj, f)
-
反序列化——load
从打开的文件对象中读取pickled对象表现形式并返回通过pickle反序列化后得到的Python对象
with open('../data/pickle.txt', 'rb') as f: res1 = pickle.load(f) print(type(res1)) # <class 'dict'> print(res1) # {1: 'a', 2: 'b'} with open('../data/pickle.data', 'rb') as f: res2 = pickle.load(f) print(type(res2)) # <class 'dict'> print(res2) # {1: 'a', 2: 'b'}
-
-
参考文献
Python中pickle序列化与反序列化
最新推荐文章于 2024-06-11 21:42:21 发布