持久化存储记录

生成测试数据脚本 

 脚本名: initdata.py

bob = {'name':'Bob Smith','age':42,'pay':30000,'job':'dev'}
sue = {'name':'Sue Jones','age':45,'pay':40000,'jbo':'hdw'}
tom = {'name':'Tom','age':50,'pay':0,'jbo':None}

db = {}
db['bob'] = bob
db['sue'] = sue
db['tom'] = tom

if __name__ == '__main__':   #作为脚本运行时
    for key in db:
        print(key,'=>\n',db[key])

使用pickle模块 

脚本名:make_db_pickle.py

from initdata import db
import pickle
dbfile = open('people-pickle','wb')
pickle.dump(db,dbfile)
dbfile.close()

脚本名:dump_db_pickle.py

import pickle
dbfile = open('people-pickle','rb')
db = pickle.load(dbfile)
for key in db:
    print(key,'=>\n',db[key])
print(db['sue']['name'])

运行结果

C:\Users\22132\Desktop\database>python make_db_pickle.py

C:\Users\22132\Desktop\database>python dump_db_file.py
bob =>
 {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue =>
 {'name': 'Sue Jones', 'age': 45, 'pay': 40000, 'jbo': 'hdw'}
tom =>
 {'name': 'Tom', 'age': 50, 'pay': 0, 'jbo': None}
Sue Jones

脚本名:update_db_pickle.py

import pickle
dbfile = open('people-pickle','rb')
db = pickle.load(dbfile)
dbfile.close()

db ['sue']['pay'] *= 1.10
db['tom']['name'] =  'Tom Tom'

dbfile = open('people-pickle','wb')
pickle.dump(db,dbfile)
dbfile.close()

运行结果:

C:\Users\22132\Desktop\database>python updata_db_pickle.py

C:\Users\22132\Desktop\database>python dump_db_pickle.py
bob =>
 {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue =>
 {'name': 'Sue Jones', 'age': 45, 'pay': 44000.0, 'jbo': 'hdw'}
tom =>
 {'name': 'Tom Tom', 'age': 50, 'pay': 0, 'jbo': None}
Sue Jones

# sue 的薪水和Tom 的名字被修改,结果被写回到文件people-pickle中。

改进我们的代码,每条记录使用一个pickle文件。

make_db_pickle_recs.py

from initdata import bob,sue,tom
import pickle

for(key,record) in [('bob',bob),('sue',sue),('tom',tom)]:
    recfile =open(key+'.pkl','wb')
    pickle.dump(record,recfile)
    recfile.close()

dump_db_pickle_recs.py
import pickle,glob
for filename in  glob.glob('*.pkl'):
    recfile = open(filename,'rb')
    record = pickle.load(recfile)
    print(filename,'=>\n',record)

suefile = open('sue.pkl','rb')
print(pickle.load(suefile)['name'])


updata_db_pickle_recs.py
import pickle
suefile = open('sue.pkl','rb')
sue = pickle.load(suefile)
suefile.close()
sue['pay'] *= 1.10
suefile = open('sue.pkl','wb')
pickle.dump(sue,suefile)
suefile.close()

结果如下:

C:\Users\22132\Desktop\database>python make_db_pickle_recs.py

C:\Users\22132\Desktop\database>python dump_db_pickle_recs.py
bob.pkl =>
 {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue.pkl =>
 {'name': 'Sue Jones', 'age': 45, 'pay': 40000, 'jbo': 'hdw'}
tom.pkl =>
 {'name': 'Tom', 'age': 50, 'pay': 0, 'jbo': None}
Sue Jones

C:\Users\22132\Desktop\database>python updata_db_pickle_recs.py

C:\Users\22132\Desktop\database>python dump_db_pickle_recs.py
bob.pkl =>
 {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue.pkl =>
 {'name': 'Sue Jones', 'age': 45, 'pay': 44000.0, 'jbo': 'hdw'}
tom.pkl =>
 {'name': 'Tom', 'age': 50, 'pay': 0, 'jbo': None}
Sue Jones

 使用Shelves


make_db_shelve.py
from initdata import bob,sue
import shelve

db = shelve.open('people-shelve')
db['bob'] = bob
db['sue'] = sue
db.close()


dump_db_shelve.py
import shelve

db = shelve.open('people-shelve')
for key in db:
    print(key,'=>',db[key])
print(db['sue']['name'])
db.close()


dudata_db_shelve.py
from initdata import tom
import shelve

db = shelve.open('people-shelve')
sue = db['sue']
sue['pay'] *= 1.10
db['sue'] = sue
db['tom'] = tom
db.close()

结果如下: 

C:\Users\22132\Desktop\database>python make_db_shelve.py

C:\Users\22132\Desktop\database>python dump_db_shelve.py
bob => {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue => {'name': 'Sue Jones', 'age': 45, 'pay': 40000, 'jbo': 'hdw'}
Sue Jones

C:\Users\22132\Desktop\database>python updata-shelve.py

C:\Users\22132\Desktop\database>python dump_db_shelve.py
bob => {'name': 'Bob Smith', 'age': 42, 'pay': 30000, 'job': 'dev'}
sue => {'name': 'Sue Jones', 'age': 45, 'pay': 44000.0, 'jbo': 'hdw'}
tom => {'name': 'Tom', 'age': 50, 'pay': 0, 'jbo': None}
Sue Jones

猜你喜欢

转载自blog.csdn.net/weixin_42125267/article/details/81876481