如何在Python中创建临时目录?
我该如何在Python中创建一个临时目录并获取它的路径呢?
6 个回答
46
为了更详细地说明另一个回答,这里有一个相对完整的例子,它可以在出现异常时清理临时目录:
import contextlib
import os
import shutil
import tempfile
@contextlib.contextmanager
def cd(newdir, cleanup=lambda: True):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
cleanup()
@contextlib.contextmanager
def tempdir():
dirpath = tempfile.mkdtemp()
def cleanup():
shutil.rmtree(dirpath)
with cd(dirpath, cleanup):
yield dirpath
def main():
with tempdir() as dirpath:
pass # do something here
346
在Python 3中,可以使用TemporaryDirectory
,这个功能来自tempfile
模块。
在示例中:
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
如果你想手动控制这个临时目录什么时候被删除,就不要使用上下文管理器,像下面这个例子:
import tempfile
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
temp_dir.cleanup()
文档中还提到:
当上下文结束或者临时目录对象被销毁时,刚创建的临时目录和它里面的所有内容都会从文件系统中删除。
比如在程序结束时,如果这个目录没有被删除,Python会自动清理这个目录,前提是没有被上下文管理器或者cleanup()
方法删除。不过,如果你依赖这个功能,Python的unittest
可能会发出警告,提示ResourceWarning: Implicitly cleaning up <TemporaryDirectory...
。