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

#将对象使用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()

结果

#分别两次打开文件读取,对象内存地址会发生改变

1 <__main__.a object at>

2 <__main__.a object at>

3 <__main__.a object at>

1 <__main__.a object at>

2 <__main__.a object at>

3 <__main__.a object at>

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

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

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值