当我们需要在Python程序中,将一个Python对象直接持久化至磁盘中,或是从磁盘中加载一个Python对象时,我们可以使用pickle类库。其实,pickle类库实现的是Python对象的序列化和反序列化。
接下来,我们将会详细讲解pickle类库的一些相关概念、函数的基本使用方法以及示例。
1. 序列化和反序列化
所谓序列化,即是将一个Python对象转换为一个字符串(字节流)的过程,而这个字符串可以被存储到磁盘上或是通过网络传输。反之,将这个字符串(字节流)还原成原来的Python对象的过程,就是反序列化。
2. pickle基本函数
pickle模块中提供了dump、load、dumps和loads四个函数,其中dump和load用于将序列化后的对象直接存储到和加载自磁盘中,而dumps和loads则用于对象的序列化和反序列化操作,但是这两个方法不需要将序列化的数据存入或加载自磁盘中。
下面分别介绍一下四个函数的基本用法:
dump(obj, file, protocol=None, *, fix_imports=True)
dump
函数用于将指定的Python对象序列化成二进制数据并写入到文件中,定义如下:
def dump(obj, file, protocol=None, *, fix_imports=True):
pass
- obj: 要序列化的Python对象
- file: 将写入序列化数据的文件对象
- protocol: 序列化时所使用的协议版本,一般使用默认值即可。
- fix_imports: 为True时,将提供即将被弃用的Pytho模块映射;为False时,不提供模块映射。
load(file)
load
函数用于从指定文件中读取二进制数据并反序列化,还原为Python对象,定义如下:
def load(file):
pass
- file: 一个可读的文件对象,包含pickled data,通常可以从
open()
函数中获取。
dumps(obj, protocol=None, *, fix_imports=True)
dumps
函数用于将Python对象直接序列化,并返回序列化后的二进制字符串,定义如下:
def dumps(obj, protocol=None, *, fix_imports=True):
pass
- obj: 要序列化的Python对象
- protocol: 序列化时所使用的协议版本,一般使用默认值即可。
- fix_imports: 为True时,将提供即将被弃用的Pytho模块映射;为False时,不提供模块映射。
loads(bytes_object)
loads
函数用于将二进制字符串反序列化为Python对象,并返回反序列化后的对象,定义如下:
def loads(bytes_object):
pass
- bytes_object: 进行反序列化的二进制字符串。
3. 实例演示
下面,我们来演示一下Python对象的序列化和反序列化过程。我们将通过汇率计算器示例来说明。
import pickle
class ExchangeRates:
def __init__(self, eur_to_usd, usd_to_eur):
self.eur_to_usd = eur_to_usd
self.usd_to_eur = usd_to_eur
def __repr__(self):
return f"ExchangeRate(EUR/USD: {self.eur_to_usd}, USD/EUR: {self.usd_to_eur})"
rate = ExchangeRates(1.20, 0.83)
print("Before Serialization: ", rate)
# 使用pickle进行序列化
with open("exchange_rates.pickle", "wb") as fh:
pickle.dump(rate, fh)
# 使用pickle进行反序列化
with open("exchange_rates.pickle", "rb") as fh:
new_rate = pickle.load(fh)
print("After Serialization: ", new_rate)
以上示例中,我们首先定义了一个ExchangeRates类,其包含如下属性:
- eur_to_usd:欧元对美元的汇率
- usd_to_eur:美元对欧元的汇率
我们实例化了一个ExchangeRates对象,并将其序列化到文件中。之后,我们又将文件中的序列化数据进行反序列化,并恢复为一个ExchangeRates对象。
输出如下:
Before Serialization: ExchangeRate(EUR/USD: 1.2, USD/EUR: 0.83)
After Serialization: ExchangeRate(EUR/USD: 1.2, USD/EUR: 0.83)
以上就是基于pickle类库进行Python对象序列化和反序列化的相关攻略。如果您有相关问题,可以在评论区和我们进行交流。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python pickle类库介绍(对象序列化和反序列化) - Python技术站