有没有一种简单的方法可以在搁置中使用python临时文件(并确保它自己清理干净)?

有没有一种简单的方法可以在搁置中使用python临时文件(并确保它自己清理干净)?,python,shelve,temporary-files,Python,Shelve,Temporary Files,基本上,我希望在我正在编写的python程序中有一个无限大的dict(更准确地说,是硬盘驱动器,而不是内存限制)。似乎tempfile和shelve模块自然适合于此,但是,我不知道如何以安全的方式将它们结合使用。我希望在搁置被GCed时删除tempfile(或在搁置不再使用后保证删除,无论何时),但我能想到的唯一解决方案是使用tempfile.TemporaryFile()打开文件句柄,从句柄获取文件名,使用此文件名打开搁置,保留对文件句柄的引用以防止其被GCed(并删除文件),然后在存储此引用

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


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

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


(*)请注意,当对工具架进行垃圾收集时,也会调用工具架的close方法。只有当解释器崩溃或被杀死时,才会出现垃圾文件。

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

(*)请注意,当对工具架进行垃圾收集时,也会调用工具架的close方法。只有在解释器崩溃或被杀死的情况下,才会出现垃圾文件