如何在 Python 中实现持久化对象?


要实现 Python 中的持久化对象,可以使用以下库。

  • shelve
  • pickle

shelve 模块

“shelf” 是一个持久化的、类似字典的对象。它与“dbm”数据库的区别在于,shelf 中的值(而不是键!)本质上可以是任意的 Python 对象——pickle 模块可以处理的任何东西。这包括大多数类实例、递归数据类型以及包含大量共享子对象的物体。

它有一些关键方法:

  • shelve.open() - 打开一个持久化的字典。指定的 filename 是底层数据库的基本文件名。作为副作用,可能会向文件名添加扩展名,并且可能会创建多个文件。默认情况下,底层数据库文件以读写方式打开。

  • shelve.sync() - 如果 shelf 以 writeback 设置为 True 打开,则写回缓存中的所有条目。此外,如果可行,则清空缓存并同步磁盘上的持久化字典。在 shelf 使用 close() 关闭时会自动调用此方法。

  • shelve.close() - 同步并关闭持久化字典对象。

pickle 模块

pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。

  • Pickling 是将 Python 对象层次结构转换为字节流的过程。要序列化对象层次结构,只需调用 dumps() 函数即可。

  • Unpickling 是逆向操作。将来自二进制文件或类字节对象的字节流转换回对象层次结构。要反序列化数据流,请调用 loads() 函数。

Pickle 模块函数

以下是 pickle 模块提供的函数。

  • pickle.dump() - 将对象的 pickle 表示写入打开的文件对象 file。

  • pickle.dumps() - 将对象的 pickle 表示作为字节对象返回,而不是写入文件。

  • pickle.load() - 从打开的文件对象 file 读取对象的 pickle 表示。

  • pickle.loads() - 返回对象的 pickle 表示数据重建的对象层次结构

示例

首先,导入 pickle 模块:

import pickle

我们创建了以下要 pickled 的输入。

my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}

创建了 demo.pickle 文件。此相同的 .pickle 文件使用上述列表进行 pickled。

with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)

现在,解开上述 pickled 文件,并取回输入值。

with open("demo.pickle","rb") as file_handle: res = pickle.load(file_handle) print(res_data)

现在让我们看看完整的示例。

import pickle # Input Data my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'} # Pickle the input with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL) # Unpickle the above pickled file with open("demo.pickle","rb") as file_handle: res = pickle.load(file_handle) print(my_data) # display the output

输出

set(['Benz', 'Toyota', 'BMW', 'Audi'])

更新于: 2022年9月20日

770 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始
广告