python shelve模块_Python中shelve模块

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对象被安全关闭。

三、内容序列化到文件

importshelve

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

三、访问文件的内容

importshelve

db = shelve.open('shelve_db')print(db['xuesheng']) #查看文件中键是'xuesheng'的内容

db.close()

运行结果:

{'name': 'Tom', 'age': 20}

四、删除文件中的内容

importshelve

db = shelve.open('shelve_db')del db['fenshu'] #删除db文件中键为fenshu的值

print(len(db)) #查看文件中有几个对象

db.close()

运行结果:

1

五、将类实例使用shelve来序列化和反序列化

importshelveclassXuesheng:def __init__(self,name,age):

self.name=name

self.age=agedeffunc(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>Tom20

本文转至:https://www.myblou.com/archives/1483

你可能感兴趣的:(python,shelve模块)