永久字典shelve

对于字典肯定非常熟悉,这是Python的内置数据类型,特点是拥有键值对的数据,
通过键访问值的速度非常快,原因是字典主要存储在内存中,通过hash存储映射
关系。缺点就是程序结束以后,字典将不能访问了。为了解决字典的这个缺陷,因此
用了这个永久字典。本文主要讲解永久字典的使用。

永久字典是将字典写成文件,存储在硬盘。当然速度比字典稍慢,但使用永久字典的
方法却非常简单,这都仰仗开源的各路大神封装得非常方便。

import shelve

db = shelve.open("gg.dat", 'c')
for key, value in zip("abcde", range(5)):
    db[key] = value

for k, v in db.items():
    print k, v

db.close()

>>> b 1
    d 3
    a 0
    c 2
    e 4

打开永久字典文件以后,就跟操作字典完全一样了,字典的值当然可以是
数值,列表,元组等类型。值得注意的是永久字典的key必须为str类型 如果是unicode则会报错,值为unicode类型是可以的。这是底层封装
对字符集的处理问题,使用的时候按照规则来就行,如果要纠结这个问题,
那就看封装的源码吧。


import shelve

db = shelve.open("gg.dat", 'c')
db[u"name"] = u"Vincent"

db.close()

>>> Traceback (most recent call last):
  File "E:/workspace/demo/demo.py", line 10, in <module>
    db[u"name"] = u"Vincent"
  File "C:\Python27\lib\shelve.py", line 133, in __setitem__
    self.dict[key] = f.getvalue()
  File "C:\Python27\lib\bsddb\__init__.py", line 279, in __setitem__
    _DeadlockWrap(wrapF)  # self.db[key] = value
  File "C:\Python27\lib\bsddb\dbutils.py", line 68, in DeadlockWrap
    return function(*_args, **_kwargs)
  File "C:\Python27\lib\bsddb\__init__.py", line 278, in wrapF
    self.db[key] = value
TypeError: String or Integer object expected for key, unicode found

永久的字典的后缀名不一定是dat,可以没有后缀名,但最好是dat活着db
这样的便于识别的名称。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 4,194评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,554评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,030评论 25 709
  • 推荐长诗集《笔电之死》 读书是种快乐,读博弈的这本书尤其如此;大约读了点书,有点因会,谈点感想,总是不难的。只要不...
    上城白阅读 230评论 0 1
  • 首先上菜→拿出图片 考虑到设置为"自动"耗电快,因此采用手动调节。 情景:用户在一个暗处使用手机,当然设...
    丶iDBC阅读 290评论 0 1

友情链接更多精彩内容