2010-07-11 18 views

risposta

136

Utilizzare la funzione mkdtemp() dal modulo tempfile:

import tempfile 
import shutil 

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

Se si utilizza questo in un test, assicurarsi 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 terminato." Vedi: http://docs.python.org/2/library/tempfile.html#tempfile.mkdtemp –

+1

Questa deve essere la risposta accettata! – gregoltsov

+23

In python3, si può fare 'con tempfile.TemporaryDirectory() come dirpath:', e la directory temporanea verrà automaticamente ripulita all'uscita dal gestore di contesto. https://docs.python.org/3.4/library/tempfile.html#tempfile.TemporaryDirectory – Symmetric

19

Per espandere su un'altra risposta, ecco un esempio abbastanza completo che può sistemare il tmpdir anche sulle 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 
+0

Vedere anche http://stackoverflow.com/a/24176022/263998 – cdunn2001

+0

Più utile della risposta accettata !!! – Timo

Problemi correlati