1. 概述
Python的shelve模块提供了一种简单的方式来持久化存储Python对象。它通过使用类似字典的接口,允许我们将Python对象作为值与任意可哈希的键相关联,并将其保存到磁盘上的文件中。shelve模块使用pickle来序列化和反序列化对象,因此可以存储几乎任何Python对象。
2. 创建和打开shelve文件
要使用shelve模块,我们首先需要创建一个新的shelve文件或者打开一个已经存在的shelve文件。我们可以通过使用shelve.open函数来完成这个任务。该函数的第一个参数是shelve文件的名称,如果文件不存在,则会创建一个新文件,如果文件已经存在,则会打开该文件。
import shelve
# 创建新的shelve文件
db = shelve.open('my_db')
# 打开已存在的shelve文件
db = shelve.open('existing_db')
3. 存储和检索数据
一旦我们打开了shelve文件,我们就可以像操作字典一样,使用键来存储和检索数据。shelve文件支持几乎所有Python对象,包括列表、字典、类对象等。
db['key1'] = 'value1'
db['key2'] = [1, 2, 3]
db['key3'] = {'name': 'John', 'age': 30}
print(db['key1']) # 输出 'value1'
print(db['key2']) # 输出 [1, 2, 3]
print(db['key3']) # 输出 {'name': 'John', 'age': 30}
4. 删除和修改数据
我们可以通过使用del关键字来删除shelve文件中的数据。
del db['key1']
如果我们想修改shelve文件中的数据,只需重新分配一个新的值给相应的键即可。
db['key2'] = [4, 5, 6]
5. 在shelve文件中存储对象
shelve模块使用pickle来将Python对象序列化为字节流,并将其存储在磁盘上。因此,我们可以存储几乎所有Python对象。
例如,我们可以存储自定义对象:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('John', 30)
db['person'] = person
retrieved_person = db['person']
print(retrieved_person.name) # 输出 'John'
print(retrieved_person.age) # 输出 30
当我们获取存储的对象时,shelve模块会创建一个新的对象并将存储的值复制给它,所以最终我们将会得到一个新的对象实例。
6. shelve文件的关闭
在我们不再需要访问shelve文件时,我们应该显式地关闭它。这是因为shelve模块在内存中使用了缓存,只有在关闭文件时,才会将缓存中的数据写入磁盘。
db.close()
7. 总结
shelve模块为我们提供了一种简单的方法来持久化存储Python对象。它使用类似字典的接口,并且可以存储几乎任何Python对象。我们可以使用shelve模块来创建、打开、存储和检索数据,并且可以对数据进行删除和修改。
在使用shelve模块时,需要注意及时关闭文件以确保数据的完整性。