Python中shelve模块是对象持久化保存方法,将对象保存到文件里面,缺省(即默认)的数据存储文件是二进制的,可以作为一个简单的数据存储方案。使用时,只需要使用open函数获取一个shelf对象,然后对数据进行增删改查操作,在完成工作、并且将内存存储到磁盘中,最后调用close函数变回将数据写入文件。
一、导入shelve模块
import shelve
二、格式
shelve.open(filename, flag=’c’, protocol=None, writeback=False)
创建或打开一个shelve对象。shelve默认打开方式支持同时读写操作。
filename是关联的文件路径。
可选参数flag,默认为“c”,如果数据文件不存在,就创建,允许读写;可以是: “r”: 只读;“w”: 可读写; “n”: 每次调用open()都重新创建一个空的文件,可读写。
protocol是序列化模式,默认值为None。
shelve.close()
同步并关闭shelve对象。
注意:每次使用完毕,都必须确保shelve对象被安全关闭。
三、内容序列化到文件
import shelve xuesheng = {'name': 'Tom', 'age': 20} fenshu = [99, 88, 77] db = shelve.open('shelve_db') # 创建一个二进制文件来存储信息,不用指定文件格式后缀,默认是二进制,不用指定是读取还是写入,默认是可读可写 db['xuesheng'] = xuesheng # 将xuesheng字典附上一个键值xuesheng,并序列化到db文件中 db['fenshu'] = fenshu # 将fenshu列表附上一个键值fenshu,并序列化到db文件中 print(fenshu) print(len(db)) # 查看文件里有几个对象 db.close()
运行结果:
[99, 88, 77] 2
四、访问文件的内容
import shelve db = shelve.open('shelve_db') print(db['xuesheng']) # 查看文件中键是'xuesheng'的内容 db.close()
运行结果:
{'name': 'Tom', 'age': 20}
五、删除文件中的内容
import shelve db = shelve.open('shelve_db') del db['fenshu'] # 删除db文件中键为fenshu的值 print(len(db)) # 查看文件中有几个对象 db.close()
运行结果:
1
六、将类实例使用shelve来序列化和反序列化
import shelve class Xuesheng: def __init__(self,name,age): self.name = name self.age = age def func(self): pass def write_shelve(): # 定义一个写入的函数 s = Xuesheng('Tom',20) # 类实例化 db = shelve.open('shelve_xuesheng_db') # 创建一个叫shelve_xuesheng_db的二进制文件 db['s'] = s # db文件存入s类的实例化,附上这个类实例化的键值为s db.close() # 关闭db数据库文件,查看路径里面可能存的有几个文件,可能有存目录的,存数据的,包括备份的一些文件等等 def read_shelve(): # 定义一个读取的函数 db = shelve.open('shelve_xuesheng_db') # 读取shelve_xuesheng_db的文件 st = db['s'] # db变量的文件里面键值为s的对象赋给st变量 print(st) print(st.name) print(st.age) db.close() if __name__ == '__main__': write_shelve() read_shelve()
运行结果:
<__main__.Xuesheng object at 0x0000022CDA0635B0> Tom 20标签:文件,python,fenshu,数据库,db,xuesheng,shelve,open From: https://www.cnblogs.com/zhangxianrong/p/17311129.html