Python 如何创建临时目录并获取其路径/文件名?

Python 如何创建临时目录并获取其路径/文件名?,python,temporary-files,temporary-directory,Python,Temporary Files,Temporary Directory,如何在Python中创建临时目录并获取其路径/文件名?使用模块中的函数: 导入临时文件 进口舒蒂尔 dirpath=tempfile.mkdtemp() # ... 用dirpath做事 shutil.rmtree(dirpath) 要扩展另一个答案,下面是一个相当完整的示例,即使在异常情况下也可以清理tmpdir: import contextlib import os import shutil import tempfile @contextlib.contextmanager def

如何在Python中创建临时目录并获取其路径/文件名?

使用模块中的函数:

导入临时文件
进口舒蒂尔
dirpath=tempfile.mkdtemp()
# ... 用dirpath做事
shutil.rmtree(dirpath)

要扩展另一个答案,下面是一个相当完整的示例,即使在异常情况下也可以清理tmpdir:

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

在Python3.2及更高版本中,在Python3的stdlib中有一个有用的contextmanager,可以使用模块中的

这直接来自于:

如果希望将目录保留更长的时间,可以执行以下操作:

import tempfile

temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
temp_dir.cleanup()

文档还说,“在完成上下文或临时目录对象的销毁后,新创建的临时目录及其所有内容将从文件系统中删除。”因此,例如,在程序结束时,如果没有显式删除该目录,Python将清理该目录。Python的
unittest
可能会抱怨
ResourceWarning:隐式清理如果我没有弄错您的问题,您还想知道临时目录中生成的文件的名称吗?
如果是,请尝试以下方法:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)

如果您在测试中使用它,请确保删除(shutil.rmtree)目录,因为它在使用后不会自动删除。“mkdtemp()的用户负责删除临时目录及其内容。请参阅:在python3中,您可以使用tempfile.TemporaryDirectory()作为dirpath:
执行
,临时目录将在退出上下文管理器时自动清理。不需要使用module.shutil.rmtree(temp_dir.name)。在windows上使用tempfile.TemporaryDirectory()作为tmpdir:
的好选择,因为存在不允许我进入临时目录的选项
import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)