如何在 Python 中实现持久对象?
要在 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'])