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

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

要在 Python 中实现持久对象,请使用以下库。

  • shelve
  • pickle

shelve 模块

“shelf” 是一种持久的类似于字典的对象。与“dbm”数据库的不同之处在于,一个 shelf 中的值(而不是键!)可以是任何 pickle 模块可以处理的本质上任意的 Python 对象。这些包括大多数类实例、递归数据类型和包含许多共享子对象的对象。

它具有一些关键方法 −

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

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

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

pickle 模块

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

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

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

pickle 模块函数

pickle 模块提供了以下函数。

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

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

  • pickle.load() − 从打开的文件对象文件中读取对象的 pickled 表示。

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

例子

首先导入 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)

现在,取消 pickle 上面的 pickled 文件并获取输入值。

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

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

import pickle

# 输入数据
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}

# 将输入数据序列化
with open("demo.pickle","wb") as file_handle:
   pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)

# 从序列化后的数据中加载
with open("demo.pickle","rb") as file_handle:
   res = pickle.load(file_handle)
   print(my_data) # 显示输出 

输出

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程