
1, 使用pickle:数据读写
pickleTest.py
#使用: python模块的工具类, 数据持久化
import pickle
from chapter1.res.list_map import db
#保存数据 ,到文件流
pickstream=open("data/pickle-data.txt","wb")
pickle.dump(db, pickstream)
#读取已保存的数据
# pickstream=open("data/pickle-data.txt","rb")
# db_data=pickle.load(pickstream)
# for key in db_data:
# print(key, ",", db_data[key])
#关闭流
pickstream.close()
pickleTest2.py
#每条数据,保存在各自的文件中
import pickle,glob
from chapter1.res.list_map import bob,sue
def save_data_each_file(): #将字典dict存入到文件中
for (key ,val) in [("bob",bob), ("sue",sue)]:
print(key, val)
#保存数据
filename="data/"+key+"-data.txt"
output=open(filename,"wb")
pickle.dump(val,output)
#关闭文件流
output.close()
def load_data_from_file():
for file in glob.glob("data/*-data.txt"):
if file.__contains__("pickle"):
pass #不处理其他文件
else:
print(file,"======")
#加载数据
input=open(file,"rb")
data=pickle.load(input)
for key in data:
print(key, ",", data[key])
if __name__=="__main__":
save_data_each_file()
load_data_from_file()
#data\bob-data.txt ======
#name , bob jones
#age , 32
#pay , 30000
#job , dev
#data\sue-data.txt ======
#name , sue smith
#age , 42
#pay , 40000
#job , dev
2, 使用shelve:读写文件
shelveTest.py
#使用shelve工具类, 持久化数据
import shelve
file_name ="data/shelve-data"
#创建字典,写入数据
def save_data():
# Open a persistent dictionary for reading and writing.
shelve_dict=shelve.open(file_name)
shelve_dict["tom"]={"name":"tom","pay":230000,"job":"dev"}
shelve_dict["sue"]={"name":"sue", "pay":300000, "job":"java-enginer"}
shelve_dict.close()
def read_data():
shelve_dict=shelve.open(file_name)
tom_dict=shelve_dict["tom"]
print(tom_dict) #{'name': 'tom', 'pay': 230000, 'job': 'dev'}
shelve_dict.close()
def update_data():
shelve_dict=shelve.open(file_name)
tom_dict=shelve_dict["tom"]
tom_dict["name"]="tom2 tom2"
tom_dict["pay"]=500000
shelve_dict["tom"]=tom_dict#替换原数据
shelve_dict.close()
if __name__ == "__main__":
save_data()
read_data()
update_data()
print("change-----------")
read_data()
#{'name': 'tom', 'pay': 230000, 'job': 'dev'}
#change-----------
#{'name': 'tom2 tom2', 'pay': 500000, 'job': 'dev'}