Python 中的 pickle 加载
我们将介绍 Python 中的 pickle
库以及如何在我们的 Python 应用程序中使用它。
Python 中的 pickle
作为数据科学家,我们在数据框、字典和任何其他形式的数据类型中使用数据集。在处理多个数据集时,我们可能需要将它们保存在文件中以供以后使用或以文件的形式轻松共享。
Python 提供了一个库 pickle
来帮助我们实现这一目标。Pickle
序列化对象,以便可以将它们保存在文件中并在需要时加载到程序中。
当我们想要序列化和反序列化 Python 对象时,我们使用 pickle
。序列化是将对象转换为字节流的过程,我们可以轻松地将其存储在磁盘上或通过网络共享。
在 pickle
的帮助下,我们可以随时轻松地将字节流反序列化回 Python 对象。
Python 中 Pickle 的优点
- 如果我们想要数据的持久性,
Pickle
在应用程序中很有用。 - 如果我们想将程序的状态数据保存到磁盘中以备后用,我们可以使用
pickle
。 - 我们也可以使用
pickle
通过 TCP 或套接字连接发送我们的数据或将数据存储在我们的数据库中。 - 如果你是数据科学家或使用机器学习算法,我们希望保存数据以进行预测,而不需要重复重写或训练模型,我们可以使用
pickle
。
Python 中 Pickle 的缺点
- Pickle 的协议是 Python 语言特有的,不能用于跨语言应用。
- 如果我们试图对在不同版本的 Python 中腌制的文件进行 unpickle,这可能会导致问题。
- 从不受信任的来源中提取数据也可能会导致问题。
- 如果我们试图解压的文件中存在一些病毒或恶意代码,它可以被执行并导致一些问题。
在 Python 中提取文件
布尔值、整数、浮点数、复数、普通和 Unicode 字符串、元组、列表、集合和字典数据类型可以使用 Python 的 pickle
库获取。
让我们从一个示例开始,我们将在其中腌制一个文件。首先,我们将导入 pickle
库,如下所示。
# python
import pickle
现在让我们创建一个字典,将其保存到文件中,然后再次加载。
# python
cats_dict = {"Tom": 5, "Oggy": 7, "Persia": 3, "Luna": 2}
要腌制这个 cat 字典,我们首先需要指定存储字典的文件名。我们可以使用 open()
函数打开文件进行写入。
open()
函数有两个参数,第一个是不带扩展名的文件名,第二个是我们想要对文件执行的操作的代码。
如果我们想用二进制代码编写文件,我们将使用 wb
作为第二个参数。如下图,w
代表写入,b
代表二进制模式。
# python
filename = "cats"
file = open(filename, "wb")
一旦我们打开文件进行写入,我们可以使用 pickle.dump()
,它接受两个参数。第一个是字典的名称,第二个参数是我们打开文件的变量,如下所示。
# python
pickle.dump(cats_dict, file)
现在我们将关闭文件。
# python
file.close()
此代码将在包含腌制数据的同一目录中创建一个名为 cats
的新文件。
输出:
Python 中的 pickle 加载
现在让我们使用 load()
方法解开刚刚腌制的文件。当我们遇到在 Python 版本 2 中腌制的对象时,load()
函数会派上用场,现在我们正在运行 Python 3。
解封可能很困难,也很麻烦。我们可以通过在 Python 版本 2 中运行文件来取消选择文件,或者我们可以使用 load()
函数中的 encoding='latin1'
来完成它,如下所示。
# python
filename = "cats"
unpickleFile = open(filename, "rb")
new_dict = pickle.load(unpickleFile, encoding="latin1")
如果你有包含 NumPy
数组的对象,此方法将不起作用。如下所示,我们必须将编码从 latin1
更改为 bytes
。
# python
filename = "cats"
unpickleFile = open(filename, "rb")
new_dict = pickle.load(unpickleFile, encoding="bytes")
输出:
从上面的例子可以看出,我们很容易解压文件并得到正确的结果。
概括
在本教程中,我们了解了 pickle
库;我们还了解了 pickle 的优缺点,以及何时何地不使用 pickle。我们学习了如何使用 load()
函数来 pickle 文件和解除 pickle 文件。
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn