shelve持久化操作模块

1、shelve提供了Python的持久化操作。持久化操作?--->就是把数据写到硬盘上,在操作shelve的时候非常像操作字典一样,也有点像redis.

import shelve
shelf = shelve.open("yttlj")
# shelf["zwj"] = "张无忌"
print(shelf['zwj'])
shelf.close()

结果:
张无忌

  会生成三个文件:

 

2、存储复杂的数据

import shelve
s = shelve.open('yttlj')
s['zwj']={'name':'张无忌','age':25,'hobby':'武术'}
print(s['zwj'])
s.close()

结果:
{'name': '张无忌', 'age': 25, 'hobby': '武术'}

  但是有缺陷,无法该变字典中的数据

import shelve
s = shelve.open('yttlj')
s['zwj']['name'] = "周芷若"   #尝试改变字典中的数据
print(s['zwj'])  #并没有改变
s.close()

结果:
{'name': '张无忌', 'age': 25, 'hobby': '武术'}

  解决方案:(writeback=True

import shelve
s = shelve.open('yttlj',writeback=True)
s['zwj']['name'] = "周芷若"   #尝试改变字典中的数据
print(s['zwj'])
s.close()

结果:
{'name': '周芷若', 'age': 25, 'hobby': '武术'}

 

3、writeback=True可以动态的把我们修改的信息写到文件中,它还可以删除数据,就像字典一样

 

import shelve
s = shelve.open('yttlj',writeback=True)
del s['zwj']
print(s['zwj'])  #没有数据了   会报错
s.close()

 

4、像字典一样遍历

import shelve
s = shelve.open('yttlj',writeback=True)
s['zwj'] = "张无忌"
s['zhr'] = "周芷若"
s.close()

s = shelve.open('yttlj')
for k in s: #像字典一样遍历
    print(k)
#结果:
zwj
zhr

print(s.keys())   #拿到key的所有集合
#结果:
KeysView(<shelve.DbfilenameShelf object at 0x000002A4A64F8320>)

for k in s.keys():
    print(k)
#结果:
zwj
zhr

for k,v in s.items():
    print(k,v)
s.close()
结果:
zwj 张无忌
zhr 周芷若

 

posted @ 2018-10-09 15:19  LW-5208  阅读(255)  评论(0)    收藏  举报