python - 有没有一种简单的方法可以在架子上使用 python 临时文件(并确保它自行清理)?

标签 python shelve temporary-files

基本上,我想要在我正在编写的 python 程序中使用无限大小(更准确地说,硬盘驱动器而不是内存限制)的字典。看起来 tempfile 和 shelve 模块自然适合于此,但是,我不知道如何以安全的方式一起使用它们。我希望在搁置被 GC 时删除临时文件(或者在搁置不再使用后保证删除,无论何时),但我能想到的唯一解决方案涉及使用 tempfile.TemporaryFile() 打开文件句柄,从句柄获取文件名,使用此文件名打开搁置,保留对文件句柄的引用以防止其被 GC(并删除文件),然后将包装器放在存储此搁置的搁架上引用。有人有比这个复杂的困惑更好的解决方案吗?

限制:只能使用标准python库,并且必须完全跨平台。

最佳答案

我宁愿继承shelve.Shelf,并重写close方法(*)来取消文件链接。请注意,根据所使用的特定 dbm 模块,您可能有多个包含架子的文件。一种解决方案可能是创建一个临时目录,而不是临时文件,并在完成后删除该目录中的所有内容。另一种解决方案是绑定(bind)到特定的 dbm 模块(例如 bsddb 或 dumbdbm),并专门删除这些库创建的那些文件。

(*) 请注意,当架子被垃圾回收时,也会调用架子的 close 方法。唯一可能产生垃圾文件的情况是解释器崩溃或被杀死。

关于python - 有没有一种简单的方法可以在架子上使用 python 临时文件(并确保它自行清理)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298037/

相关文章:

mercurial - 使用 "hg unshelve"就像使用 Git 取消存储一样

Linux shell 中的 python 导出环境变量

windows - 在 Windows 中获取安全的临时文件夹

perl:打开文件句柄,写入其中,稍后给它命名?

python - Go build不会从脾气暴躁的生成Go代码生成二进制文件吗?

python - 删除行和 ValueError 数组的长度不同

python - 删除或编辑 admin.TabularInline 中的对象名称

python - 在 jupyter 中禁止显示 matplotlib 动画中的最后一帧

go - 如何将临时文件作为命令行参数传递