Python3 shelve用法

数据读写

import shelve as sv

db = sv.open('db')
db['key1'] = {'1':1, '2':2, '3':3}
db.close()

db = sv.open('db')
print(db['key1'])
db['key1']['1'] = 10 # 不能改变单个条目的值
print(db['key1'])
db['key1'] = {'1':'a', '2':'b', '3':'c'} # 可以覆盖整个key的值
print(db['key1'])
db.close()

db = sv.open('db', writeback = True)
print(db['key1'])
db['key1']['1'] = 10 # 可以改变单个条目的值
print(db['key1'])
db['key2'] = {'a':100, 'b':200, 'c':300}
db.close()

db = sv.open('db')
print(db['key1'])
print(db['key2'])
db.close()

输入结果

{'1': 1, '2': 2, '3': 3}
{'1': 1, '2': 2, '3': 3}
{'1': 'a', '2': 'b', '3': 'c'}
{'1': 'a', '2': 'b', '3': 'c'}
{'1': 10, '2': 'b', '3': 'c'}
{'1': 10, '2': 'b', '3': 'c'}
{'a': 100, 'b': 200, 'c': 300}

总结:

  1. 从shelve的db文件中重新再访问一个key拿的是它的拷贝!
    修改此拷贝后不做拷贝写回并不影响原来的key,
    但你要是直接做的操作是赋值新的值到一个key里,那肯定就是指向原来的key,会被覆盖的。
  2. writeback=True,DB在close()的时候会将缓存中的每一个对象都写入到DB

open()参数说明

shelve.open(filename, flag='c', protocol=None, writeback=False)

The optional flag argument can be:

Value Meaning
'r' Open existing database for reading only (default)
'w' Open existing database for reading and writing
'c' Open database for reading and writing, creating it if it doesn’t exist
'n' Always create a new, empty database, open for reading and writing
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 12,962评论 0 13
  • 1.埋点是做什么的 2.如何进行埋点 3.埋点方案的设计 近期常被问到这个问题,我担心我的答案会将一些天真烂漫的孩...
    lxg阅读 6,099评论 0 1
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,748评论 0 38
  • var navigator = navigator || {};var window = window || {}...
    DF_Sky阅读 5,081评论 0 0
  • 在孩子和我们都心情愉悦时,尊重会是相当容易的;但是如果孩子愁眉苦脸,或者做出的事让我们愁眉苦脸,那么一切就会变得困...
    屁桃爸阅读 988评论 0 0