使用 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 存储机器学习模型。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串