come creare una directory temporanea e ottenere il nome del percorso / file in Python
come creare una directory temporanea e ottenere il nome del percorso / file in Python
Risposte:
Utilizzare la mkdtemp()
funzione dal tempfile
modulo:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
with tempfile.TemporaryDirectory() as dirpath:
e la directory temporanea verrà automaticamente ripulita all'uscita dal gestore del contesto. docs.python.org/3.4/library/…
In Python 3, è possibile utilizzare TemporaryDirectory nel modulo tempfile .
Questo è direttamente dagli esempi :
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
Se desideri mantenere la directory un po 'più a lungo, puoi fare qualcosa del genere (non dall'esempio):
import tempfile
import shutil
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
shutil.rmtree(temp_dir.name)
Come sottolineato da @MatthiasRoelandts, la documentazione dice anche che "la directory può essere ripulita esplicitamente chiamando il cleanup()
metodo".
Per espandere un'altra risposta, ecco un esempio abbastanza completo che può ripulire il tmpdir anche su eccezioni:
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
In python 3.2 e versioni successive, è disponibile un utile gestore di scenari per questo nello stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
Se ricevo correttamente la tua domanda, vuoi conoscere anche i nomi dei file generati nella directory temporanea? In tal caso, prova questo:
import os
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir:
# generate some random files in it
files_in_dir = os.listdir(tmp_dir)