2012-06-03 10 views
25

He leído los documentos sobre esta función, sin embargo, no creo que entienda esto correctamente, y si alguien puede decirme qué estoy pensando mal, o si estoy en lo cierto, sería una gran ayuda. Aquí está mi comprensión:shutil.rmtree() aclaración

utilizando la función shutil.rmtree(path), eliminará solo el directorio especificado, no la ruta completa. IE:

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

el uso de este, sólo sería eliminar el directorio 'novato' correcta? no es el camino completo?

+0

¿Qué quiere decir con "no el camino completo"? ¿Qué pasaría si "eliminase el camino completo"? –

+0

la ruta completa como en ''usuario/probador/noob''. IE borra el directorio de usuario que contiene tester y noob. –

+0

@IT Ninja: ¿cuál fue el resultado cuando probaste? -Paso 1 – user1801810

Respuesta

40

Si noob es un directorio, la función shutil.rmtree() eliminará noob y todos los archivos y subdirectorios debajo de él. Es decir, noob es la raíz del árbol que se eliminará.

24

Esto definitivamente solo eliminará el último directorio en la ruta especificada. Sólo probarlo:

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

... sólo eliminará 'bar'.

11

Aquí hay algunos malentendidos.

Imagínese un árbol como este:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

Si desea eliminar user, acaba de hacer shutil.rmtree('user'). Esto también eliminará user/tester y user/tester/noob ya que están dentro de user. Sin embargo, también eliminará user/developer y user/developer/guru, ya que también están dentro de user.

Si rmtree('user/tester/noob') sería eliminar user y tester, ¿cómo decir existirían si user/developeruser se ha ido?


¿O se refiere a algo así como http://docs.python.org/2/library/os.html#os.removedirs?

Intenta eliminar el elemento primario de cada directorio eliminado hasta que falla porque el directorio no está vacío. Entonces en mi árbol de ejemplo, os.removedirs('user/tester/noob') eliminaría primero noob, luego trataría de eliminar tester, lo cual está bien porque está vacío, pero se detendría en user y lo dejará en paz, porque contiene developer, que no queremos eliminar .