Python持久性管理Pickle模块详细介绍
什么是Pickle模块?
Pickle模块是Python中的一个标准模块,提供了序列化和反序列化Python对象的功能。序列化是指将Python对象转化为二进制数据流的过程,反序列化是指将这个数据流转化为原始Python对象的过程。
使用Pickle模块可以将Python对象以二进制的方式持久化到本地磁盘或者传输到网络上的其他计算机。持久化的对象可以是Python内置的数据类型(如列表、字典、元组、字符串等),也可以是自定义的Python类实例。
基本用法
将Python对象持久化到本地磁盘
import pickle
# 定义一个Python对象
data = {'name': 'Alice', 'age': 21, 'gender': 'female'}
# 使用Pickle将该对象持久化
with open('data.bin', 'wb') as f:
pickle.dump(data, f)
可以看到,我们使用了Pickle模块中的dump
函数将Python对象data
持久化到了本地磁盘中的data.bin
文件中。dump
函数的第一个参数是要持久化的Python对象,第二个参数是一个可写的二进制文件流。
从本地磁盘恢复Python对象
import pickle
# 从本地磁盘中加载数据
with open('data.bin', 'rb') as f:
data = pickle.load(f)
# 打印恢复出的Python对象
print(data)
我们使用了Pickle模块中的load
函数从data.bin
文件中读取出了被持久化的Python对象,打印出来可以看到,该对象恢复成功。
注意事项
-
只能持久化可被pickle模块识别的Python对象,对于一些特殊的Python对象(如文件、socket对象等),则不支持持久化操作。
-
pickle模块可以对一个对象进行持久化操作,也可以对包含多个对象的数据结构进行持久化操作。
-
持久化的二进制流是Python特有的格式,因而只能被Python解析器识别,不适用于跨语言数据交换。
示例1:持久化对象的方法名称
import pickle
# 定义一个Python对象
def square(x):
return x ** 2
# 使用Pickle将该对象持久化
with open('square.bin', 'wb') as f:
pickle.dump(square, f)
# 从本地磁盘中加载数据
with open('square.bin', 'rb') as f:
func = pickle.load(f)
# 打印恢复出的函数对象
print(func)
# 使用恢复出的函数对象进行计算
print(func(5))
这个示例中需要持久化一个函数对象square
,我们可以用Pickle将其序列化并保存到本地磁盘。在读取序列化后的二进制数据流时,我们可以得到原始的函数对象。
示例2:持久化自定义Python类的实例
import pickle
# 定义一个自定义Python类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __repr__(self):
return f"Person(name={self.name}, age={self.age}, gender={self.gender})"
# 定义一个自定义Python类的实例
p = Person('Alice', 21, 'female')
# 使用Pickle将该实例持久化
with open('person.bin', 'wb') as f:
pickle.dump(p, f)
# 从本地磁盘中加载数据
with open('person.bin', 'rb') as f:
p_loaded = pickle.load(f)
# 打印恢复出的Person实例
print(p_loaded)
# 检查恢复出的Person实例
assert isinstance(p_loaded, Person)
assert p_loaded.name == 'Alice'
assert p_loaded.age == 21
assert p_loaded.gender == 'female'
这个示例中,我们定义了一个自定义的Python类Person
,并创建了一个类的实例p
,然后使用Pickle将其序列化并保存到本地磁盘。在读取序列化后的二进制数据流时,我们可以得到原始的类的实例对象p_loaded
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python持久性管理pickle模块详细介绍 - Python技术站