6

我在http://code.google.com/p/filecache/上用搁置编写了一些单元测试,python 2 完全保存了我在 shelve.open() 中指定的文件名,但在 python 3 中我得到了 3 个不同的文件“bak”, “数据”和“目录”。所以在测试开始之前,我想删除这些文件,但我不知道我是否对它们的文件名或扩展名有任何保证。

如果我知道搁架的名称,我该如何擦除它?

4

2 回答 2

8

您获得的扩展取决于使用的数据库后端。Python 2 和 Python 3 之间的默认值可能不同,但也可能是您的环境中可用的数据库接口之间的差异。

所以不,您不能保证扩展,除非您使用特定的实现,即 BsdDbShelf 或 DbfilenameShelf。您可能会在 tempfile 创建的临时目录中指定一个文件,然后删除 while 目录。

于 2011-02-11T08:51:18.993 回答
2

我使用搁置是因为 tempFile 和 dict[] 对象不能跨模块持久存在。正如您所发现的,调用 .clear() 不会从磁盘上的持久对象中清除内容,退出后会磁盘上留下一个填充的 r+w 文件。(类似于 use-after-free 漏洞)您可以在使用完毕后删除搁置:

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)
于 2017-03-16T18:28:49.037 回答