📅  最后修改于: 2020-11-07 08:23:56             🧑  作者: Mango
Python标准库中的shelve模块提供了简单而有效的对象持久性机制。在此模块中定义的架子对象是类似字典的对象,它永久存储在磁盘文件中。这将在类似于UNIX的系统上创建类似于dbm数据库的文件。
书架词典有一定的限制。在此特殊字典对象中,只能将字符串数据类型用作键,而将任何可挑选的Python对象用作值。
搁置模块定义了三个类,如下所示:
Sr.No | Shelve Module & Description |
---|---|
1 |
Shelf This is the base class for shelf implementations. It is initialized with dict-like object. |
2 |
BsdDbShelf This is a subclass of Shelf class. The dict object passed to its constructor must support first(), next(), previous(), last() and set_location() methods. |
3 |
DbfilenameShelf This is also a subclass of Shelf but accepts a filename as parameter to its constructor rather than dict object. |
在shelve模块中定义的open()函数,该函数返回DbfilenameShelf对象。
open(filename, flag='c', protocol=None, writeback=False)
filename参数分配给创建的数据库。对于读/写访问,标志参数的默认值为’c’。其他标志是“ w”(仅写),“ r”(只读)和“ n”(读/写新功能)。
序列化本身受pickle协议控制,默认为none。默认情况下,最后一个参数的写回参数为false。如果设置为true,则将缓存访问的条目。每次访问都会调用sync()和close()操作,因此过程可能很慢。
以下代码创建一个数据库并将字典条目存储在其中。
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
这将在当前目录中创建test.dir文件,并以哈希形式存储键值数据。 Shelf对象具有以下可用方法-
Sr.No. | Methods & Description |
---|---|
1 |
close() synchronise and close persistent dict object. |
2 |
sync() Write back all entries in the cache if shelf was opened with writeback set to True. |
3 |
get() returns value associated with key |
4 |
items() list of tuples – each tuple is key value pair |
5 |
keys() list of shelf keys |
6 |
pop() remove specified key and return the corresponding value. |
7 |
update() Update shelf from another dict/iterable |
8 |
values() list of shelf values |
访问架子中特定密钥的值-
s=shelve.open('test')
print (s['age']) #this will print 23
s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair
与内置字典对象一样,items(),keys()和values()方法返回视图对象。
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
print (list(s.keys()))
['name', 'age', 'marks']
print (list(s.values()))
['Ajay', 25, 75]
要将其他词典的项目与书架合并,请使用update()方法。
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]