shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
使用案例:
import shelve
db1 = shelve.open('shelve_db1')
db1['dic'] = {'int':12, 'float':2.5, 'string':'shelve db'}
#直接对文件句柄[key]操作,就可以存入数据
db1.close()
且重要的是它还会直接在打开的当前目录生成三个文件:
shelve.db1.bak
shelve.db1.dat
shelve.db1.dir
其中shelve.db1.dat 存储的就是b字节数据类型的数据,
bak和dir后缀的就可能是和数据库相关的设计缓存之类的东西了。
注:文件生成后,我们可以将前面的这一段生成shelve db的代码先行注释掉,不影响下面的继续测试操作。
db1 = shelve.open('shelve_db1')
existing = db1['dic']
# 取出数据的时候也只需要直接用字典的操作方法获取即可,但是如果key不存在会报错
db1.close()
print(type(existing), existing)
# <class 'dict'> {'string': 'Shelve db', 'float': 2.5, 'int': 12}
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
importshelve
d=shelve.open('shelve_test')#打开一个文件
classTest(object):
def__init__(self,n):
self.n=n
t=Test(1)
t2=Test(12)
name=["alex","rain","test"]
d["test"]=name#持久化列表
d["t1"]=t#持久化类
d["t2"]=t2
d.close()


结:
1、shelve模块将内存数据以字典的类型(key,value)通过文件持久化,模拟出简单的db效果。
2、shelve模块可以持久化任何pickle可支持的python数据格式,但是它的key必需得是字符串。
3、shelve可以看作是pickle模块的一个封装,但它实现了可以多次dump(后面的dump不会覆盖前面的)和多次load。
4、shelve访问己有key时,实际上取出的是数据源给出的一份拷贝,
所以对于拷贝做出的增加和删除等操作都需要用writeback=True参数才能实现写入回源中进行修改。
shelve模块提供了一种简单的方法,以字典形式将Python数据持久化到文件中,支持pickle格式。key必须为字符串,可以多次dump而不覆盖,并且在访问key时返回数据的拷贝。若要修改源数据,需使用writeback=True。
316

被折叠的 条评论
为什么被折叠?



