如何将Python对象保存在本地文件中?

Python对象的永久存储

1.使用Python的pickle模块

import pickle
class A:
    def __init__(self,name,a):
        self.name=name
        self.a=a
    def rewrite(self,args):
        self.a=args
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#将对象使用pickle模块转换成二进制文件然后写入文件中
#但此种方法无法直接更新对象文件的信息
#此时存入文件的应该是对象本身而不是内存地址
obj1=A("qw","1")
obj1=pickle.dumps(obj1)
with open("userinfo","ab")as f:
    f.write(obj1)
obj2=A("qa","2")
obj2=pickle.dumps(obj2)
with open("userinfo","ab")as f:
    f.write(obj2)
obj3=A("qs","3")
obj3=pickle.dumps(obj3)
with open("userinfo","ab")as f:
    f.write(obj3)

#读取文件中的对象文件
#pickle.load()一次只读取一个对象文件
f=open("userinfo","rb")
while 1:
    try:
        obj = pickle.load(f)
        print(obj.a,obj)
    except:
        break
f.close()
f=open("userinfo","rb")
while 1:
    try:
        obj = pickle.load(f)
        print(obj.a,obj)
    except:
        break
f.close()

结果

#分别两次打开文件读取,对象内存地址会发生改变
<__main__.A object at 0x10c1375c0>
<__main__.A object at 0x10c137518>
<__main__.A object at 0x10c137940>
<__main__.A object at 0x10c1379b0>
<__main__.A object at 0x10c137630>
<__main__.A object at 0x10c1375c0>

可以将对象放进列表中再写入文件

如需修改对象时,将列表中的对象修改后再放回列表中最后再重新写入文件中

2.使用Python的shelve库。

其和Python内置的数据结构“字典”操作很类似不同点是shelve存储在外部文件中而不是存储在计算机内存中。

import shelve
class A:
    def __init__(self,name,a):
        self.name=name
        self.a=a
    def rewrite(self,args):
        self.a=args
obj1=A("qw","1")
obj2=A("qa","2")
obj3=A("qs","3")
#写入文件
db=shelve.open("userinfo1")
db["qw"]=obj1
db["qa"]=obj2
db["qs"]=obj3
db.close()
#更新信息
db=shelve.open("userinfo1")
for k in db:
    print(db[k].a)
    a=db[k]
    a.a=12
    db[k]=a
db.close()
db=shelve.open("userinfo1")
for k in db:
    print(db[k].a)
db.close()
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值