shelve
Posted balcklightning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shelve相关的知识,希望对你有一定的参考价值。
shelve提供python的持久化操作. 什么叫持久化操作呢? 说白话,就是把数据写到硬盘上.
在操作shelve的时候非常的像操作一个字典. 这个东?到后期. 就像redis差不多.
字典怎么用shelve就怎么用
import shelve
shelf = shelve.open("sylar") #打开一个文件"sylar"如果没有会自动生成
shelf["jay"] = "周杰伦"
print(shelf[‘jay‘]) #结果:周杰伦
shelf.close()
感觉到了么. 这个鬼东?和字典差不多. 只不过你的字典是一个文件. 接下来, 我们存储 一些复杂的数据
import shelve
s = shelve.open("sylar")
s["jay"] = {"name":"周杰伦", "age":18, "hobby":"哄?小孩"}
print(s[‘jay‘]) #{‘name‘: ‘周杰伦‘, ‘age‘: 18, ‘hobby‘: ‘哄?小孩‘}
s.close()
但是,有坑
import shelve
s = shelve.open("sylar")
s[‘jay‘][‘name‘] = "胡辣汤" #尝试改变字典中的数据
s.close()
s = shelve.open("sylar")
print(s[‘jay‘]) # 并没有改变
s.close()
解决方案
import shelve
s = shelve.open("sylar", writeback=True)
s[‘jay‘][‘name‘] = "胡辣汤" # 尝试改变字典中的数据
s.close()
s = shelve.open("sylar")
print(s[‘jay‘]) # 改变了.{‘name‘: ‘胡辣汤‘, ‘age‘: 18, ‘hobby‘: ‘哄?孩‘}
s.close()
writeback=True可以动态的把我们修改的信息写入到文件中. 而且这个?东?西还可以删除数据. 就像字典?样. 上?波操作
s = shelve.open("sylar", writeback=True)
del s[‘jay‘]
s.close()
s = shelve.open("sylar")
print(s[‘jay‘]) # 报错了,没有了
s.close()
s = shelve.open("sylar", writeback=True)
s[‘jay‘] = "周杰伦"
s[‘wlj‘] = "王?宏"
s.close()
#
#
s = shelve.open("sylar")
for k in s: # 像字典?样遍历
print(k)
print(s.keys()) # 拿到所有key的集合
for k in s.keys():
print(k)
for k, v in s.items(): # 像字典?一样操作
print(k, v)
s.close()
综上shelve就当成字典来用就?了. 它比redis还简单.......
以上是关于shelve的主要内容,如果未能解决你的问题,请参考以下文章