设为首页 加入收藏

TOP

Python中使用Pickle来保存对象和重载对象
2023-09-09 10:25:44 】 浏览:96
Tags:Python Pickle

拾取和解除拾取

对象的序列化是将对象转换为比特形式的方法,这样我们就可以在硬盘上保存对象的状态。尽管许多语言都为我们提供了对象序列化的方式,但Python在所有的语言中更加灵活。

在Python中,对象序列化被称为pickling,而去序列化被称为unpickling。我们在 Python 中大多使用对象。因此,我们几乎可以对所有的东西进行序列化/非序列化。然而,在使用它之前,不可避免地要小心,必须知道 pickling 的目的。

在进入理论细节之前,让我们用Pickle模块演示一下Python中的pickling。

在Python中进行腌制

对于pickling,首先,导入pickle 模块。

import pickle

我们可以在Python中序列化几乎任何对象。让我们拿一个字典对象来做示范。

bio_dict = {
    'name': 'Zohaib',
    'age': 29,
    'profession': 'Engineer'
}#Python小白学习交流群:711312441

pickle 包含 函数来序列化该对象。.dump()

with open('bio_dict.pickle', 'wb' ) as file_name:
    pickle.dump(bio_dict, file_name)

在上面的代码中,我们打开了一个有写权限的文件bio_dict.pickle (即wb),然后用.dump() 函数将bio_dict 字典腌制到腌制文件中。结果,我们成功地将字典转换为字节流格式。

在 Python 中解除腌制

当需要再次使用腌制的对象时,可以对它进行反序列化。为此,我们可以使用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() 函数再次获取对象。上面的代码产生了以下输出。

The retrieved dictionary is:  {'name': 'Zohaib', 'age': 29, 'profession': 'Engineer'}

我们可以用下面的代码检查腌制和未腌制的对象是否相等。

assert bio_dict==unpickled_dict

腌制的优势和劣势

以下是Python中腌制的优点:

  • 几乎任何Python对象都可以用Python中的这个pickle 模块进行序列化,不像JSON 和其他序列化技术。

  • 我们以后可以使用腌制的对象。例如,如果你做了一个大型的计算,并且腌制了对象。那么,下次当你开始一个新的Python会话时,你不需要再做以前完成的大型计算。

  • 相反,你把腌制的对象解开,在新的计算中使用它们。这样,我们可以节省时间和资源。

  • 腌制的对象可以有效地被多个线程读取,从而实现快速的并行计算。

腌制有多种后果。在使用pickling之前,你应该意识到它们。

  • 我们不应该解开从不可靠的来源收集的数据。它可能包含被篡改的数据或一些任意脆弱的代码,可能导致严重的安全问题。
  • 与JSON 文件不同,腌制文件不是人类可以阅读的。
  • JSON 文件可以被多种语言所使用和支持。另一方面,Python中的pickle文件可能不被许多语言所支持,你可能需要相关的第三方中介库来作为适配器。

还有什么可以被腌制

这是一个重要的问题,需要很多时间来描述。但是,简而言之,你可以腌制许多Python的东西,比如函数、Pandas 数据框,以及其他许多东西。

Pickle也是一个对机器学习非常有帮助的工具,因为它可以让你保存你的模型,减少耗时的再训练,以及分享、提交和重新加载以前训练的模型。

你可以按照这个指南使用pickle来存储你的机器学习模型。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇各个数据类型的内置方法(字符串.. 下一篇 Python的数据类型的内置方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目