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日

相关文章

  • Django中模型Model添加JSON类型字段的方法

    下面是详细讲解“Django中模型Model添加JSON类型字段的方法”的攻略: 1. JSON类型字段简介 在Django中,模型的字段类型有多种,比如字符型(CharField)、文本型(TextField)、日期型(DateField)等等,但是在Django 3.1新增了JSON类型字段(JSONField),它可以用于存储和操作JSON格式的数据。…

    python 2023年6月3日
    00
  • 一文详解Python中的行为验证码验证功能

    下面我将详细讲解“一文详解Python中的行为验证码验证功能”的完整攻略。 什么是行为验证码 行为验证码(Behavioral Captcha)是一种人机验证技术,它通过分析用户在页面上的行为,比如鼠标移动、点击、拖拽等操作,来识别用户是否为真人。行为验证码相对于传统的图形验证码、短信验证码等,更加智能化和便捷。 如何在Python中实现行为验证码 在Pyt…

    python 2023年6月6日
    00
  • python使用参数对嵌套字典进行取值的方法

    讲解“python使用参数对嵌套字典进行取值的方法”的完整攻略,具体如下: 1. 首先了解嵌套字典的结构 在python中,嵌套字典可以理解为是多层级的连续字典,每层字典都可以包含一个或多个键值对。例如下面的代码演示了一个简单的嵌套字典结构: person = { ‘name’: ‘张三’, ‘age’: 18, ‘city’: ‘北京’, ‘languag…

    python 2023年5月13日
    00
  • python正则表达式常见的知识点汇总

    Python正则表达式常见的知识点汇总 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式。本文将为您详细讲解Python正则表达式的常见知识点,包括正表达式语法、模块的常用方法和两个示例说明。 正则表达式语法 在正则表达中使用[]表示字符集,^表示取反,-表示范围,+匹配一个或多个字符,*表示…

    python 2023年5月14日
    00
  • Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    以下是Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题的完整攻略。 什么是 utf-8-sig 编码格式? 在介绍解决乱码问题之前,我们先来了解一下 utf-8-sig 编码格式。utf-8-sig 和 utf-8 编码格式非常类似,都是一种常见的Unicode编码格式,不同的是utf-8-sig会在文件开头添加一个BOM(Byt…

    python 2023年5月20日
    00
  • Python中对列表排序实例

    Python中对列表排序实例 在Python中,可以使用sort()函数对列表进行排序。sort()函数有两个可选参数:reverse和key。reverse参数用于指定是否降序排列,默认为False,即升序排列;key参数用于指定排序的关键字,可以是一个函数或lambda表达。本攻略将详细介绍如何在Python中对列表进行排序。 对数字进行排序 以下是一个…

    python 2023年5月13日
    00
  • python获取文件真实链接的方法,针对于302返回码

    Python 获取文件真实链接的方法,针对于 302 返回码 在爬取网站数据时,有些网站会将文件链接进行加密或者重定向,为了获取文件的真实链接,我们需要对重定向进行处理。以下是 Python 获取文件真实链接的方法,针对于 302 返回码。 使用 requests 模块获取真实链接 使用 requests 模块获取真实链接非常简单,只需要使用 allow_r…

    python 2023年5月15日
    00
  • Python3基础之函数用法

    Python3基础之函数用法攻略 在Python中,函数是一段封装了特定功能的代码片段。当需要反复执行相同的内容时,我们可以将这段代码封装成一个函数。函数的定义以def关键字为开头,后面跟上函数名、形参、以及函数体。在调用时,只需要使用函数名和实参即可。 函数定义 函数的定义通常包括以下几个部分: 函数名 函数名是用来调用函数的,它要求是唯一的、有意义的,以…

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