基本上,我想要在我正在编写的 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/