python基础:数据持久化工具类pickle,shelve

在这里插入图片描述

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'}

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/86763543
今日推荐