Come creare una directory temporanea e ottenere il nome del percorso / file in Python


Risposte:


211

Utilizzare la mkdtemp()funzione dal tempfilemodulo:

import tempfile
import shutil

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

7
Se lo usi in un test, assicurati di rimuovere (shutil.rmtree) la directory perché non viene automaticamente cancellata dopo l'uso. "L'utente di mkdtemp () è responsabile dell'eliminazione della directory temporanea e del suo contenuto una volta terminata." Vedi: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
Niels Bom

98
In python3, puoi farlo with tempfile.TemporaryDirectory() as dirpath:e la directory temporanea verrà automaticamente ripulita all'uscita dal gestore del contesto. docs.python.org/3.4/library/…
Symmetric

41

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".


2
shutil.rmtree (temp_dir.name) non è necessario.
Sidcha

37

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


3

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.