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 0x10c1375c0>
2 <__main__.A object at 0x10c137518>
3 <__main__.A object at 0x10c137940>
1 <__main__.A object at 0x10c1379b0>
2 <__main__.A object at 0x10c137630>
3 <__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.使用Python的pickle模塊

結果

可以將對象放進列表中再寫入文件
如需修改對象時,將列表中的對象修改后再放回列表中最后再重新寫入文件中
2.使用Python的shelve庫。
其和Python內置的數據結構“字典”操作很類似不同點是shelve存儲在外部文件中而不是存儲在計算機內存中。


