Python使用pickle进行序列化和反序列化的示例代码

Python中可以使用pickle模块进行序列化和反序列化。pickle是Python标准库中的模块,可以将对象或者数据结构转化为二进制流,方便传输或者保存到文件中。接下来,将详细讲解Python使用pickle进行序列化和反序列化的示例代码及其技巧。

序列化

在Python中使用pickle进行序列化非常简单,只需要调用pickle.dumps()或者pickle.dump()即可将Python对象序列化成二进制流。其中pickle.dumps()返回序列化后的二进制流,pickle.dump()则将对象保存到文件中(默认为二进制模式)。下面来看一个简单的例子:

import pickle

# 定义一个字典对象
my_dict = {'name': 'Tom', 'age': 18, 'gender': 'male'}

# 将对象序列化成二进制流(bytes)
serialized_obj = pickle.dumps(my_dict)

# 将对象保存到文件中
with open('my_dict.pkl', 'wb') as f:
    pickle.dump(my_dict, f)

在上述代码中,我们使用pickle.dumps()将字典对象序列化成了二进制流,并使用pickle.dump()将对象保存到了文件my_dict.pkl中。注意,在使用pickle.dump()保存对象到文件时,需要以二进制模式打开文件,并且只有当文件类型是二进制格式时才能使用pickle进行序列化。

反序列化

使用pickle进行反序列化也非常简单,只需要调用pickle.loads()或者pickle.load()即可将序列化后的二进制流转换回Python对象。其中pickle.loads()传入二进制流并返回Python对象,pickle.load()则从文件中读取并返回Python对象。下面来看一个简单的例子:

import pickle

# 读取保存的文件
with open('my_dict.pkl', 'rb') as f:
    serialized_obj = f.read()

# 将二进制流反序列化回Python对象
my_dict = pickle.loads(serialized_obj)

# 打印反序列化后得到的Python对象
print(my_dict)

在上述代码中,我们使用pickle.load()从文件my_dict.pkl中读取了一个对象,然后使用pickle.loads()将二进制流转换回了Python对象。最后打印对象,将会输出字典对象的内容。

示例说明

下面通过两个示例对pickle进行序列化和反序列化更详细地进行说明。

示例一:序列化列表对象

import pickle

# 定义一个列表对象
my_list = [1, 2, 3, 4, 5]

# 将对象序列化成二进制流(bytes)
serialized_obj = pickle.dumps(my_list)

# 将对象保存到文件中
with open('my_list.pkl', 'wb') as f:
    pickle.dump(my_list, f)

在上述示例中,我们定义了一个包含5个整数的列表,然后使用pickle进行了序列化,并将其保存到文件my_list.pkl中。你可以通过读取文件并使用pickle进行反序列化验证其正确性。

示例二:反序列化自定义类对象

import pickle

# 自定义一个类
class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __repr__(self):
        return 'Person(name={}, age={}, gender={})'.format(self.name, self.age, self.gender)

# 创建一个Person对象并进行序列化
person = Person('Tom', 18, 'male')
serialized_obj = pickle.dumps(person)

# 将序列化后的对象保存到文件中
with open('person.pkl', 'wb') as f:
    pickle.dump(person, f)

# 从文件中反序列化Person对象
with open('person.pkl', 'rb') as f:
    deserialized_obj = pickle.load(f)

# 打印反序列化后的对象,应该得到Person类的实例
print(deserialized_obj)

在上述示例中,我们定义了一个Person类,该类包含了name、age和gender三个属性,然后创建了一个Person对象并进行了序列化。最后,我们将序列化后的对象保存到文件中并从文件中反序列化,得到了一个Person类的实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用pickle进行序列化和反序列化的示例代码 - Python技术站

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

相关文章

  • Pygame Surface创建图像的实现

    Pygame是一款用于开发2D游戏的Python库,它包含了众多功能强大的模块和类,其中就包括对图像的处理和渲染。Pygame中的Surface对象是表示图像的主要数据结构,通过对Surface对象的操作,我们可以实现创建、读取、保存、编辑等操作。下面我们将详细讲解“Pygame Surface创建图像的实现”的完整攻略,包含以下内容: 1. 创建Surfa…

    python 2023年5月19日
    00
  • python使用pymongo操作mongo的完整步骤

    下面是Python使用pymongo操作MongoDB的完整步骤: 安装pymongo 在使用pymongo之前,需要先安装pymongo库。可通过pip进行安装: pip install pymongo 连接MongoDB 使用pymongo之前,需要先连接到MongoDB。可以使用pymongo.MongoClient类来连接MongoDB数据库。连接M…

    python 2023年5月14日
    00
  • Python 八个数据清洗实例代码详解

    下面是 “Python 八个数据清洗实例代码详解” 的完整攻略,包含示例代码说明: Python 八个数据清洗实例代码详解 1. 非 ASCII 字符的过滤 在处理文本数据时,我们经常会遇到非 ASCII 字符,这些字符会导致一些文本处理和分析任务出现问题。因此,我们需要过滤这些非 ASCII 字符。 我们可以使用 Python 内置的字符串方法 isasc…

    python 2023年6月2日
    00
  • python requests 使用快速入门

    Python requests使用快速入门 Python requests是一个流行的HTTP库,它可以让我们轻松地发送HTTP请求,并处理响应。本文将介绍如何使用Python requests库进行HTTP请求,并提供一些示例说明。 安装requests库 在使用requests库之前,我们需要先安装它。我们使用pip命令来安装requests库,如下所示…

    python 2023年5月14日
    00
  • 如何在Python 中获取单成员集合中的唯一元素

    获取单成员集合中的唯一元素可以使用 Python 内置函数 next(),该函数可以接收一个可迭代对象并返回对象的下一个元素。 针对单成员集合,可以使用 iter() 将其转化为一个迭代器,再用 next() 获取唯一元素。具体过程如下: # 使用iter()将集合转化为迭代器 s = set([1]) s_iter = iter(s) # 获取唯一元素 u…

    python 2023年6月3日
    00
  • python3 lambda表达式详解

    Python3 Lambda表达式详解 Lambda表达式是Python中的一种匿名函数,它可以在不定义函数的情况下快速定义一个函数。本文将详细讲解Python3 Lambda表达式的使用方法,包括如何定义Lambda函数、如何使用Lambda函数等内容。 定义Lambda函数 以下是一个使用Lambda表达式定义函数的示例: f = lambda x: x…

    python 2023年5月15日
    00
  • 用python实现刷点击率的示例代码

    以下是Python实现刷点击率的攻略: 什么是刷点击率? 在互联网广告业中,点击率被认为是评价广告效果的重要指标之一。因此,有些人会使用一些手段,如机器人等,来刷高点击率,以提高广告效果的表现。 刷点击率的代码实现思路 实现刷点击率的方法有很多种,这里将介绍使用Python实现的一种基本思路: 首先,需要利用Python的网络请求库,如requests、ur…

    python 2023年6月2日
    00
  • python魔法方法-属性转换和类的表示详解

    首先我们来了解一下什么是Python中的魔法方法。在Python中,魔法方法是以双下划线__作为前缀和后缀的特殊方法。这些方法提供了类的构造、初始化、比较、算术运算等操作的特殊行为。其中就包括本次要讲解的属性转换和类的表示。 一、属性转换 在Python中,我们经常需要对一个对象进行类型转换,比如将字符串类型转换为整数类型、将列表转换为元组类型等。而Pyth…

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