Python Shelve模块对象持久化使用指南

七月
七月
发布时间:2026-10-13| 6人浏览过
原创

本文详解Python中Shelve模块的对象持久化用法。涵盖如何打开数据库、分配键值对、读写数据及关闭文件。重点强调多数据库操作时的内存管理,避免因未关闭文件导致的资源消耗问题,提供完整的代码示例与注意事项。

Shelve是Python中一个用于实现对象持久化的强大模块。在使用该模块存储对象时,必须为每个对象指定一个唯一的键以识别其值。通过这种键值对机制,Shelve文件实际上充当了一个数据库,允许用户随时访问其中存储的任何对象。

Python中Shelve模块的使用示例

要使用Shelve存储对象,首先需要导入该模块,然后按照以下方式为对象分配值:

import shelve
database = shelve.open(filename.suffix)
object = Object()
database['key'] = object

例如,若需保存股票数据,可参考以下代码调整:

import shelve
stockvalues_db = shelve.open('stockvalues.db')
object_ibm = Values.ibm()
stockvalues_db['ibm'] = object_ibm
object_vmw = Values.vmw()
stockvalues_db['vmw'] = object_vmw
object_db = Values.db()
stockvalues_db['db'] = object_db

此时“stock values.db”数据库已处于打开状态,无需再次手动打开。你可以同时打开多个数据库,对每个数据库进行写入操作,并在程序终止时由Python自动关闭它们。例如,你可以为每个股票代码保留一个单独的名称数据库,并将以下内容追加到前面的代码中:

## assuming shelve is already imported
stocknames_db = shelve.open('stocknames.db')
objectname_ibm = Names.ibm()
stocknames_db['ibm'] = objectname_ibm
objectname_vmw = Names.vmw()
stocknames_db['vmw'] = objectname_vmw
objectname_db = Names.db()
stocknames_db['db'] = objectname_db

需要注意的是,数据库文件的名称或后缀的任何更改都会被视为不同的文件,从而构成一个全新的数据库。

这将生成包含给定值的第二个数据库文件。与大多数自定义格式的文件不同,Shelve生成的数据库以二进制形式保存。

数据写入文件后,即可随时调用。若要在后续会话中恢复数据,需重新打开该文件;若在同一个会话中,直接调用该值即可。Shelve数据库文件默认以读写模式打开。以下是实现此操作的基本语法:

import shelve
database = shelve.open(filename.suffix)
object = database['key']

因此,前述示例中的读取操作将显示为:

import shelve
stockname_file = shelve.open('stocknames.db')
stockname_ibm = stockname_file['ibm']
stockname_db = stockname_file['db']

Shelve使用注意事项

务必注意,在显式关闭数据库之前(或直到程序终止),数据库将保持打开状态。因此,如果你编写的是规模较大的程序,必须在使用完毕后关闭数据库。否则,整个数据库(而不仅仅是你需要的值)都会驻留在内存中,从而消耗大量计算资源。

要关闭Shelve文件,请使用以下语法:

database.close()

如果将上述所有代码示例合并到一个程序中,我们将打开两个数据库文件并消耗内存。因此,在读取上一个示例中的股票名称后,你可以依次关闭每个数据库,如下所示:

stockvalues_db.close()
stocknames_db.close()
stockname_file.close()

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。