gpt4 book ai didi

python - 在 Python 类中清理临时文件夹的正确方法

转载 作者:IT老高 更新时间:2023-10-28 20:30:27 37 4
gpt4 key购买 nike

我正在创建一个类,我想在其中生成一个临时文件夹工作区,该文件夹将在对象的生命周期内持续存在,然后被删除。我在 def __init__ 中使用 tempfile.mkdtemp() 来创建空间,但我读到我不能依赖 __del__被调用。

我想要这样的东西:

class MyClass:
def __init__(self):
self.tempfolder = tempfile.mkdtemp()

def ... #other stuff

def __del__(self):
if os.path.exists(self.tempfolder): shutil.rmtree(self.tempfolder)

是否有另一种/更好的方法来处理这种清理工作?我正在阅读有关 with 的内容,但它似乎只在函数中有用。

最佳答案

警告:您永远不能保证临时文件夹将被删除,因为用户总是可以硬杀死您的进程,然后它就无法运行其他任何东西。

说,做

temp_dir = tempfile.mkdtemp()
try:
<some code>
finally:
shutil.rmtree(temp_dir)

由于这是一种非常常见的操作,Python 有一种特殊的方式来封装“做某事、执行代码、清理”:上下文管理器。你可以自己写如下:

@contextlib.contextmanager
def make_temp_directory():
temp_dir = tempfile.mkdtemp()
try:
yield temp_dir
finally:
shutil.rmtree(temp_dir)

并将其用作

with make_temp_directory() as temp_dir:
<some code>

(请注意,这使用 @contextlib.contextmanager 快捷方式来制作上下文管理器。如果您想以原始方式实现一个,则需要使用 __enter____exit__ 方法;__enter__ 将创建并返回临时目录,而 __exit__ 将其删除。

关于python - 在 Python 类中清理临时文件夹的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379742/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com