duhhunjonn
¿Cómo puedo crear un directorio temporal y obtener su ruta en Python?
Nagev
En Python 3, TemporaryDirectory
desde el tempfile
Se puede utilizar el módulo.
Desde el ejemplos:
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
Para controlar manualmente cuándo se elimina el directorio, no utilice un administrador de contexto, como en el siguiente ejemplo:
import tempfile
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
temp_dir.cleanup()
La documentación también dice:
Al finalizar el contexto o la destrucción del objeto de directorio temporal, el directorio temporal recién creado y todo su contenido se eliminan del sistema de archivos.
Al final del programa, por ejemplo, Python limpiará el directorio si no fue eliminado, por ejemplo, por el administrador de contexto o el cleanup()
método. de pitón unittest
puede quejarse de ResourceWarning: Implicitly cleaning up <TemporaryDirectory...
si confías en esto, sin embargo.
-
shutil.rmtree(temp_dir.name) no es necesario.
– sidcha
14 de noviembre de 2019 a las 7:14
-
“Python limpiará el directorio si no se eliminó explícitamente”. Creo que esto solo se aplica si el estilo del administrador de contexto (
with ...
) se utiliza.–Mateen Ulhaq
4 de diciembre de 2021 a las 5:43
-
Si ejecuto el segundo ejemplo (sin administrador de contexto) con
sleep(5)
en lugar detemp_dir.cleanup()
Puedols
el directorio temporal antes de que finalice el programa y después de que finalice, el mismo directorio desaparecerá. Probablemente sea mejor usar un administrador de contexto o elcleanup()
método, sin embargo.– Nagev
4 de diciembre de 2021 a las 16:26
-
esta es la mayor solución; no se requiere shutil.rmtree peligroso
– Mate
14 de noviembre de 2022 a las 0:17
Felipe
Utilizar el mkdtemp()
función de la tempfile
módulo:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
-
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 termine”. Ver: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
– Niels Bom
12 de noviembre de 2013 a las 11:42
-
En python3, puedes hacer
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
4 de febrero de 2016 a las 23:11
Para ampliar otra respuesta, aquí hay un ejemplo bastante completo que puede limpiar el tmpdir incluso en 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
-
buena alternativa a
with tempfile.TemporaryDirectory() as tmpdir:
en las ventanas ya que hay este molesto error eso no me deja entrar al directorio temporal–Rui Rodrigues
26 de enero de 2021 a las 13:48
En python 3.2 y versiones posteriores, hay un administrador de contexto útil para esto en stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
Pablo Rougieux
Los documentos sugieren usar el TemporaryDirectory
administrador de contexto, que crea un directorio temporal y lo elimina automáticamente al salir del administrador de contexto:
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# Outside the context manager, directory and contents have been removed.
Usando pathlib
para facilitar la manipulación de rutas además de tempfile
permite crear nuevos caminos con la /
operador de ruta de pathlib:
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as tmpdirname:
temp_dir = Path(tmpdirname)
file_name = temp_dir / "test.txt"
file_name.write_text("bla bla bla")
print(temp_dir, temp_dir.exists())
# /tmp/tmp81iox6s2 True
print(file_name, "contains", file_name.open().read())
# /tmp/tmp81iox6s2/test.txt contains bla bla bla
Fuera del administrador de contexto, los archivos han sido destruidos
print(temp_dir, temp_dir.exists())
# /tmp/tmp81iox6s2 False
print(file_name, file_name.exists())
# /tmp/tmp81iox6s2/test.txt False
Sillín de pala
Si respondo correctamente su pregunta, ¿también desea saber los nombres de los archivos generados dentro del directorio temporal? Si es así, prueba esto:
import os
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir:
# generate some random files in it
files_in_dir = os.listdir(tmp_dir)