使用 Pickle 在 Python 中保存和加载对象
本文演示了如何在 Python 中保存和重新加载对象。 我们还将了解如何使用 Python 进行 Pickling 和 Unpickling。 此外,我们将看到 Pickling 的优点和缺点。
Pickling 和 Unpickling
对象的序列化是将对象转换为位的形式,以便我们可以将对象的状态保存在硬盘上。 尽管许多语言为我们提供了对象序列化的方式,但 Python 在所有这些方面都更加灵活。
在Python中,对象序列化称为pickling,反序列化称为unpickling。 我们在Python中主要使用对象。 因此,我们几乎可以序列化/取消序列化所有内容。 不过,难免要小心,使用前必须了解酸洗的目的。
在深入理论细节之前,让我们使用 Pickle 模块演示一下 Python 中的酸洗。
Python 中的 Pickling
对于 pickle,首先导入 pickle 模块。
import pickle
我们可以在 Python 中序列化几乎任何对象。 让我们使用一个字典对象来进行演示。
bio_dict = {
'name': 'Zohaib',
'age': 29,
'profession': 'Engineer'
}
pickle 包含 .dump()
函数来序列化对象。
with open('bio_dict.pickle', 'wb' ) as file_name:
pickle.dump(bio_dict, file_name)
在上面的代码中,我们打开了一个具有写权限(即wb)的文件bio_dict.pickle,然后使用 .dump()
函数将bio_dict字典pickle到pickle文件中。 这样,我们就成功地将字典转换成了字节流格式。
Python 中的 Unpickle
当需要再次使用pickled对象时,可以将其反序列化。 为此,我们可以使用 pickle.load()
函数,如下面的代码所示:
with open('bio_dict.pickle', 'rb' ) as file_name:
unpickled_dict =pickle.load(file_name)
print("The retrieved dictionary is: ", unpickled_dict)
我们打开之前保存的 (.pickle) 文件,然后使用 .load() 函数再次获取该对象。 上面的代码产生以下输出。
检索到的字典为:{'name': 'Zohaib', 'age': 29, 'profession': 'Engineer'}
我们可以使用以下代码检查 pickled 和 unpickled 对象是否相等。
assert bio_dict==unpickled_dict
Pickling 的优点和缺点
以下是 Python 中 pickling 的优点:
- 与 JSON 和其他序列化技术不同,几乎任何 Python 对象都可以使用 Python 中的此 pickle 模块进行序列化。
-
我们稍后可以使用腌制的对象。 例如,如果您进行了大量计算并腌制了对象。 然后,下次启动新的 Python 会话时,您不需要再次执行之前完成的大型计算。
相反,您取消腌制的对象并在新的计算中使用它们。 这样,我们就可以节省时间和资源。
- Pickled 对象可以由多个线程有效地读取,从而实现快速并行计算。
pickling 会产生多种后果。 在使用pickling之前您应该了解它们。
- 我们不应该取消从不可靠来源收集的数据。 它可能包含更改的数据或一些可能导致严重安全问题的任意易受攻击的代码。
- 与 JSON 文件不同,pickled 文件不是人类可读的。
- JSON 文件可以被多种语言使用和支持。 另一方面,Python 中的 pickle 文件可能不受许多语言支持,您可能需要相关的 3rd 方中间库来充当适配器。
还有什么可以 Pickled
这是一个需要大量时间来描述的重要点。 但是,简而言之,您可以Pickled许多 Python 事物,例如函数、Pandas 数据框架等等。
Pickle 对于机器学习来说也是一个非常有用的工具,因为它可以让您保留模型,减少耗时的重新训练,以及共享、提交和重新加载之前训练的模型。
大家可以按照本指南使用 pickle 存储机器学习模型。
相关文章
Python中defaultdict的使用
发布时间:2023/06/29 浏览次数:126 分类:Python
-
今天的文章讨论 defaultdict 容器并使用代码示例演示其用法。Python 中的 defaultdict 与 dict defaultdict 是一个类似字典的容器,属于 collections 模块。
Python 中的 with 语句
发布时间:2023/06/29 浏览次数:83 分类:Python
-
本篇文章将介绍with语句的功能及其在Python中的应用。在Python中使用with语句 该语句本质上用于帮助处理异常并在使用资源时清理资源。 它确保代码正确执行并随后清理资源。
Python 单步执行代码
发布时间:2023/06/29 浏览次数:145 分类:Python
-
在本文中,我们将讨论使用 Python 调试器单步调试代码。 我们将从头开始解释一个名为 PDB 的命令行工具。 我们还将学习如何在 Python IDLE 的帮助下逐步执行代码。
Python 编辑距离
发布时间:2023/06/29 浏览次数:67 分类:Python
-
今天,我们将学习Python中的编辑距离。 我们还将探讨字符串的插入、删除、替换和递归实现。在 Python 中编辑距离 编辑距离是将一个字符串转置为另一个字符串所需的量。
type.Dict 和 Dict 之间的区别及其在 Python 中的用途
发布时间:2023/06/28 浏览次数:93 分类:Python
-
本文讨论如何将类型提示与 Typing.Dict 结合使用,并将其与通常的 dict 函数区分开来。type.Dict 和 dict 之间的区别及其在 Python 中的用途
在 Python 中解析 JSON 对象数组
发布时间:2023/06/28 浏览次数:57 分类:Python
-
由于浏览器可以快速解析 JSON 对象,因此它们有助于在客户端和服务器之间传输数据。 本文将介绍如何使用Python的JSON模块传输和接收JSON数据。
在 Python 中等待 5 秒
发布时间:2023/06/28 浏览次数:152 分类:Python
-
本篇文章将讨论如何在 Python 中等待 5 秒。在 Python 中使用 time.sleep() 函数等待 5 秒 Python 的 time 模块提供了存储和操作时间的功能和对象。
Python 中的模糊字符串匹配
发布时间:2023/06/28 浏览次数:89 分类:Python
-
今天,我们将学习如何使用 thefuzz 库,它允许我们在 python 中进行模糊字符串匹配。 此外,我们将学习如何使用 process 模块,该模块允许我们借助模糊字符串逻辑有效地匹配或提取字符串。Py
在 Python 中执行 Shell 命令并获取输出
发布时间:2023/06/28 浏览次数:81 分类:Python
-
在本文中,我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。从 Python 脚本执行 CMD 命令并使用 os