生成测试数据脚本
脚本名: 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 JonesC:\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 JonesC:\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