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

pythonprogrammingserver side programming

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

  • shelve
  • pickle

shelve 模块

"shelf" 是一个持久的、类似字典的对象。与"dbm"数据库的区别在于,shelf 中的值(不是键!)基本上可以是任意的 Python 对象 — pickle 模块可以处理的任何内容。这包括大多数类实例、递归数据类型和包含大量共享子对象的对象。

它有一些关键方法 −

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

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

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

pickle 模块

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

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

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

Pickle 模块函数

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

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

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

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

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

示例

首先,导入 pickle 模块 −

import pickle

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

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

demo.pickle 文件已创建。此 .pickle 文件使用上述列表进行 pickle。

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

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

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'])

相关文章