Cómo crear un directorio temporal y obtener la ruta / nombre de archivo en Python


Respuestas:


210

Use la mkdtemp()función del tempfilemódulo:

import tempfile
import shutil

dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)

77
Si usa esto en una prueba, asegúrese de eliminar (shutil.rmtree) el directorio porque no se elimina automáticamente después de su uso. "El usuario de mkdtemp () es responsable de eliminar el directorio temporal y su contenido cuando haya terminado con él". Ver: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
Niels Bom

97
En python3, puede hacerlo with tempfile.TemporaryDirectory() as dirpath:, y el directorio temporal se limpiará automáticamente al salir del administrador de contexto. docs.python.org/3.4/library/…
Simétrico

41

En Python 3, se puede utilizar TemporaryDirectory en el módulo tempfile .

Esto es directamente de los ejemplos :

import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
     print('created temporary directory', tmpdirname)
# directory and contents have been removed

Si desea mantener el directorio un poco más largo, entonces se podría hacer algo como esto (no del ejemplo):

import tempfile
import shutil

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

Como señaló @MatthiasRoelandts, la documentación también dice que "el directorio se puede limpiar explícitamente llamando al cleanup()método".


2
shutil.rmtree (temp_dir.name) no es necesario.
sidcha

37

Para ampliar otra respuesta, aquí hay un ejemplo bastante completo que puede limpiar el tmpdir incluso con excepciones:

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


3

Si recibo su pregunta correctamente, ¿también desea conocer los nombres de los archivos generados dentro del directorio temporal? Si es así, intente esto:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.