永久字典shelve

2017-01-01  本文已影响0人  Black先森

对于字典肯定非常熟悉,这是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
这样的便于识别的名称。

上一篇下一篇

猜你喜欢

热点阅读