2012-06-03 12 views
25

Ho letto il documento su questa funzione, tuttavia, non penso di capirlo correttamente, e se qualcuno può dirmi cosa sto pensando male, o se sono corretto, sarebbe un grande aiuto. Qui è la mia comprensione:shutil.rmtree() chiarimento

utilizzando la funzione di shutil.rmtree(path), si elimina solo la directory specificata, non l'intero percorso. IE:

shutil.rmtree('user/tester/noob')

usando questo, sarebbe cancellare solo la directory 'niubbo' corretto? non il percorso completo?

+0

Cosa intendi per "non il percorso completo"? Cosa accadrebbe se "cancellasse il percorso completo"? –

+0

il percorso completo come in "utente/tester/noob". IE elimina la directory dell'utente contenente tester e noob. –

+0

@IT Ninja: qual è stato il risultato quando hai provato? -Step 1 – user1801810

risposta

40

Se noob è una directory, la funzione shutil.rmtree() eliminerà noob e tutti i file e le sottodirectory sottostanti. Cioè, noob è la radice dell'albero da rimuovere.

24

Questo eliminerà definitivamente solo l'ultima directory nel percorso specificato. Basta provare:

mkdir -p foo/bar 
python 
import shutil 
shutil.rmtree('foo/bar') 

... potrà rimuovere solo 'bar'.

11

Qui c'è qualche incomprensione.

Immaginate un albero come questo:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

Se si desidera eliminare user, basta fare shutil.rmtree('user'). Questo eliminerà anche user/tester e user/tester/noob poiché sono all'interno di user. Tuttavia, eliminerà anche user/developer e user/developer/guru, poiché sono anche all'interno di user.

Se rmtree('user/tester/noob') sarebbe eliminare user e tester, come si fa a dire user/developer esisterebbe se user è andato?


O vuoi dire qualcosa come http://docs.python.org/2/library/os.html#os.removedirs?

Prova a rimuovere il padre di ogni directory rimossa fino a quando non riesce perché la directory non è vuota. Quindi nel mio albero di esempio, os.removedirs('user/tester/noob') rimuoverebbe il primo noob, quindi proverebbe a rimuovere tester, che è ok perché è vuoto, ma si fermerà a user e lascerà stare, perché contiene developer, che non vogliamo eliminare .