如何在Python 3中删除3个shelve文件?

6 投票
2 回答
2135 浏览
提问于 2025-04-16 11:37

我在http://code.google.com/p/filecache/上写了一些使用shelve的单元测试。在Python 2中,shelve.open()里我指定的文件名会被准确保存。但是在Python 3中,我得到的是三个不同的文件,分别是“bak”、“dat”和“dir”。所以在测试开始之前,我想删除这些文件,但我不知道它们的文件名或扩展名是否有保证。

如果我知道shelve的名字,我该怎么删除它呢?

2 个回答

2

我使用shelve是因为tempFile和dict[]对象在不同模块之间不能保存数据。正如你发现的,调用.clear()并不会从磁盘上的持久对象中清除内容,这样在退出后,磁盘上仍然会有一个已填充的可读写文件。(这有点像使用后未释放的漏洞)当你用完shelve后,可以通过以下方式删除它:

import os
import shelve

shelve_name = 'shelve_name'
shelve_contents = shelve.open(shelve_name, flag='c', protocol=None, writeback=False)

shelve_file = (os.path.join(os.getcwd(), shelve_name))
os.remove(shelve_file)
8

你能得到哪些扩展功能,取决于你使用的数据库类型。默认情况下,Python 2和Python 3可能会有所不同,但这也可能是因为你所在的环境中可用的数据库接口不同。

所以,不,你不能保证会有这些扩展功能,除非你使用特定的实现方式,比如BsdDbShelf或DbfilenameShelf。你也可以指定一个在临时目录中创建的文件,然后在用完后删除整个目录。

撰写回答