概述
Python中提供了三个用于序列化和反序列化的模块:marshal、json和pickle,这里对pickle模块进行总结归纳。
pickle是Python中的一个标准模块,其实现了序列化和反序列化的二进制协议,可以对对象进行序列化和反序列化操作,“Pickling”表示Python对象转换为字节流的过程,这一过程为序列化过程,“Unpickling”和“Pickling”恰好相反,是将字节流转换为Python对象的过程,这一过程也称为反序列化。,但是其缺点是没有加密机制和数字签名,因此安全性差,尽管如此,pickle还是用于处理ad-hoc的理想模式。
优点
- 使用pickle可以对各种可以pickle的类型进行快速的压缩
缺点
- 没有安全机制(没有加密机制和数字签名),因此不能对不可信的或为授权的字节流进行反序列化
pickle和json区别
- 1.json是一种文本序列化格式(它输出unicode文本,虽然大多数时候它被编码为utf-8),而pickle是一种二进制序列化格式;
- 2.json序列化后的文件具有可读性,而pickle不具有;
- 3.json广泛用于其他语言汇总,pickle是Python特有的;
- 4.默认情况下,JSON只能用于Python内置类型的一个子集,并且不包含自定义类; pickle可以用于大量的Python类型。
pickle API
属性
pickle.HIGHEST_PROTOCOL
:表示最高可用的pickle协议,在dump()
方法和load()
方法中作为参数使用,也可以使用在Pickle构造方法中。
pickle.DEFAULT_PROTOCOL
:表示默认的pickle协议。
方法
pickle.dump(obj, file, protocol=None, *, fix_imports=True)
:将pickled的对象写入二进制文件中,和Pickler(file, protocol).dump(obj)
方法等价。
pickle.dumps(obj, protocol=None, *, fix_imports=True)
:将pickled的对象序列化后返回一个byte对象,而不是写入到文件中。
pick