Python中对象数据的持久化操作学习笔记

在Python中,数据的持久化通常指的是将内存中的数据(如变量、列表、字典等)保存到硬盘上,以便在程序退出或重新启动后仍然可以访问这些数据。Python提供了多种实现数据持久化的模块,其中包括marshal和shelve。

一、marshal模块

marshal模块提供了一种将Python对象转换为字节序列(二进制字符串)的方式,以便可以将其保存到文件中。同时,它也可以将字节序列转换回Python对象。这个模块在处理简单的数据结构(如数字、字符串、列表和字典)时方便。

#1 将字典保存到文件中
import marshal  
# 创建一个字典  
data = {'name': '张三', 'age': 30, 'city': '西安'}  
# 将字典写入文件  
with open('data.marshal', 'wb') as f:  
    marshal.dump(data, f)

#2 从文件中读取字典到程序中
# 从文件读取数据  
with open('data.marshal', 'rb') as f:  
    loaded_data = marshal.load(f)  
# 输出数据  
print(loaded_data)  
# 输出: {'name': '张三', 'age': 30, 'city': '西安'}  

注意:marshal模块不支持跨平台的数据交换,因为它依赖于Python的内部表示。此外,由于它生成的是二进制数据,所以可读性也很差。

二、shelve模块

shelve模块提供了一个简单的持久化字典接口,使得Python对象可以像字典一样被保存到文件中,也可以从文件中读取到程序中。与marshal不同,shelve模块支持更复杂的Python对象,如自定义类的实例。

#1 将对象保存到文件中
import shelve  
# 创建一个字典  
data = {'name': '李四', 'age': 25, 'city': '上海'}  
# 创建一个shelve数据库  
with shelve.open('data.shelve') as db:  
    db['person'] = data
#2 从文件中读取对象到程序中
# 打开shelve数据库  
with shelve.open('data.shelve') as db:  
    loaded_data = db['person']  
# 输出数据  
print(loaded_data)  
# 输出: {'name': '李四', 'age': 25, 'city': '上海'}  

注意事项:
虽然shelve模块非常方便,但它使用pickle来序列化对象,这可能会带来一些安全风险,因为pickle可以执行任意代码。因此,在处理不受信任的数据时,应该避免使用shelve模块。
当不再需要访问shelve数据库时,应该显式地关闭它(使用with语句可以自动关闭)。否则,可能会导致数据损坏或丢失。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值