Python pickle类库介绍(对象序列化和反序列化)

当我们需要在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技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法

    Python3使用xml.dom.minidom和xml.etree模块解析xml文件封装函数的方法 在Python中,我们可以使用xml.dom.minidom和xml.etree模块来解析XML文件。本文将详细介绍如何使用这两个模块来解析XML文件,并封装成函数。 使用xml.dom.minidom模块解析XML文件 xml.dom.minidom模块是…

    python 2023年5月15日
    00
  • JavaScript Event学习第四章 传统的事件注册模型

    接下来我将详细讲解JavaScript Event学习第四章的内容,传统的事件注册模型。 什么是传统的事件注册模型? 在传统的事件注册模型中,我们通过JavaScript代码向HTML页面添加事件监听器。当事件发生时,我们的代码将会被调用。事件监听器函数可以手动附加到某个元素,或者在代码中动态创建。传统的事件注册模型使用DOM Level 0事件模型或set…

    python 2023年6月13日
    00
  • python分割和拼接字符串

    当需要将一个字符串进行拆分或者组合时,Python提供了一系列函数和方法来处理。下面我们就来详细讲解如何进行Python分割和拼接字符串。 分割字符串 1. split()方法 split()方法是Python中最基本的字符串分割函数。它用于将一个字符串进行分割,返回一个由分割后的子字符串组成的列表。 使用示例: # 将字符串以空格为分隔符进行分割 str1…

    python 2023年6月5日
    00
  • 实操Python爬取觅知网素材图片示例

    觅知网是一个提供高质量素材下载的网站,包括图片、音频、视频等。本文将详细讲解如何使用Python爬取觅知网的素材图片,包括如何解析网页、如何下载图片等。 解析网页 要解析网页,我们可以使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML响应数据。以下是一个示例,演示如何解析觅知网的素材图片网页: import requests…

    python 2023年5月15日
    00
  • Python generator生成器和yield表达式详解

    Pythongenerator生成器和yield表达式详解 在Python中,生成器是一种特殊的迭代器,它可以在迭代过程中动态生成数据,而不一次性生成所有数据。生成器通过yield达式来实现,yield表达式可以将函数的执行状态保存下来,并在下一次调用时从上一次离开的地继续执行。本文将详细讲解Python中的生成器和yield表达式的用法和注意事项,提供两个…

    python 2023年5月14日
    00
  • Python爬虫JSON及JSONPath运行原理详解

    在Python爬虫中,JSON是一种常用的数据格式,用于在不同的应用程序之间传递数据。JSONPath是一种用于在JSON数据中查找和提取数据的语言。以下是Python爬虫JSON及JSONPath运行原理的详细攻略: JSON的运行原理 JSON是一种轻量级的数据交换格式,它使用文本格式来表示数据。JSON数据由键值对组成,键和值之间用冒号分隔,键值对之间…

    python 2023年5月14日
    00
  • Python函数进阶与文件操作详情

    Python函数进阶与文件操作详情 本篇攻略介绍Python中函数进阶与文件操作的相关内容,主要包括以下几个方面: 函数进阶 函数参数传递 匿名函数 递归函数 文件操作 文件读写 文件遍历与操作 函数进阶 函数参数传递 在Python中,可以通过位置参数、默认参数、可变参数和关键字参数四种方式对函数进行参数传递。 位置参数 位置参数是指直接通过顺序传递参数值…

    python 2023年5月13日
    00
  • python pytesseract库的实例用法

    Python pytesseract库是一个OCR(Optical Character Recognition,光学字符识别)库,可以将图像中的文字转换为可编辑的格式。下面详细讲解如何使用pytesseract库。 安装pytesseract库 在命令行中输入以下命令,安装pytesseract库: pip install pytesseract 安装tes…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部