提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Pickle的解释
pickle 是 Python 的一个内置模块,用于实现对象的序列化和反序列化。简单来说,pickle 可以将一个 Python 对象转换为一个字节流(序列化),并能够将这个字节流重新转换回原来的对象(反序列化)。这使得 Python 对象可以保存到文件中,或通过网络传输到其他 Python 程序中去。
pickle 能够处理的数据类型包括:
- 所有的原生数据类型(如整数、浮点数、复数、字符串、字节对象等)。
- 集合类型(如列表、元组、字典、集合等)。
- 类实例:pickle 可以序列化对象实例,但需要注意的是实例所属的类的定义在序列化和反序列化时需要是可用的。
- 函数、类和方法:pickle 也可以序列化函数和类等,但被序列化的函数或类在反序列化时必须在模块的命名空间中可用。
一、Pickle的基本用法
1.1 序列化
要将一个 Python 对象保存到一个文件中,你可以使用 pickle.dump() 方法。例如,保存一个包含多种数据类型的字典:
import pickle
data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': {None, True, False}
}
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
这里使用 ‘wb’ 模式打开文件,意味着以二进制写模式打开,这对于 pickle 操作是必须的。
1.2 反序列化
从文件中读取并还原 Python 对象,可以使用 pickle.load() 方法
import pickle
with open('data.pickle', 'rb') as f:
data_loaded = pickle.load(f)
print(data_loaded)
也可以简写 df = pickle.load('data.pkl','rb')
这里使用 ‘rb’ 模式打开文件,即以二进制读模式,这同样是处理 pickle 数据所必需的。
二.Pickle的优缺点
2.1 优点
1、优点:
pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化。
没有外部标准强加的限制,例如JSON或XDR(不能代表指针共享)。
默认情况下,pickle数据格式使用相对紧凑的二进制表示。如果需要最佳尺寸特征,则可以有效地压缩数据。
pickle可以表示极其庞大的Python类型(其中许多是自动的,通过巧妙地使用Python的内省工具;复杂的案例可以通过实现特定的对象API来解决)。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
2.缺点:
pickle模块只能在python中使用,仅限于传输的两端都是python的情况,且需要尽量保持两端的版本一致。
非Python程序可能无法重建pickled Python对象。
pickle序列化后的数据,可读性差,人一般无法识别。