1.概念:
对象数据的持久化操作是将程序中的对象数据保存到外部存储介质(如文件、数据库等)中,以便在程序下次运行时能够读取和使用这些数据.
2.常用模块:marshal和shelve
回顾:序列化和反序列化
import pickle
# 1. 将字典对象,序列化写入文件,以二进制写入模式打开文件
with open("dat2.dat", mode="wb") as f:
#将字典user_dict序列化写入文件中
pickle.dump(user_dict, f)
# 2. 将数据反序列化程序中,以二进制读取模式重新打开文件
with open("dat2.dat", mode="rb") as f2:
# 将f2文件中的数据,反序列化成字典对象u
u = pickle.load(f2)
print(u, type(u))
marshal
实现字典数据保存到文件中、从文件中读取到程序中
import marshal
data = {"name": "Alice", "age": 25}
# 将字典数据序列化并保存到文件
with open("data.bin", "wb") as file:
marshal.dump(data, file)
# 从文件中读取并反序列化数据
with open("data.bin", "rb") as file:
loaded_data = marshal.load(file)
print(loaded_data)
优点:以二进制形式保存和读取,效率较高,不支持复杂的数据结构
shelve
实现通过字典方式在文件中保存
/
读取程序中的对象数据
import shelve
#创建字典
u_dict = {} # 用户数据
s_dict = {} # 学生信息
with shelve.open("dat4.db") as f:
#将字典存储在数据库文件下
f["user"] = u_dict
f['stu'] = s_dict
#再次打开数据库文件
with shelve.open("dat4.db") as f:
#读取对应的值
s = f['stu']
print(s, type(s))
u = f['user']
print(u, type(u))
优点:方便保存和读取各种类型的对象数据,并支持并发读取