web-dev-qa-db-fra.com

clarification de shutil.rmtree ()

J'ai lu la documentation de cette fonction, cependant, je ne pense pas la comprendre correctement. Si quelqu'un peut me dire ce qui me manque, ou si j'ai raison, ce serait d'une grande aide. Voici ma compréhension:

en utilisant la fonction shutil.rmtree(path), il supprimera uniquement le répertoire spécifié, pas le chemin complet. C'EST À DIRE:

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

en utilisant cela, cela supprimerait seulement le répertoire 'noob' correct? pas le chemin complet?

36
IT Ninja

Si noob est un répertoire, la fonction shutil.rmtree() supprimera noob et tous les fichiers et sous-répertoires en dessous. Autrement dit, noob est la racine de l'arborescence à supprimer.

53
Rich Walsh

Cela ne supprimera définitivement que le dernier répertoire du chemin spécifié. Essayez-le:

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

... ne supprimera que 'bar'.

26
krase

Il y a un malentendu ici.

Imaginez un arbre comme celui-ci:

 - user
   - tester
     - noob
   - developer
     - guru

Si vous voulez supprimer user, faites simplement shutil.rmtree('user'). Cela supprimera également user/tester Et user/tester/noob Car ils se trouvent dans user. Cependant, il supprimera également user/developer Et user/developer/guru, Car ils se trouvent également dans user.

Si rmtree('user/tester/noob') supprimait user et tester, comment voulez-vous dire que user/developer Existerait si user avait disparu?


Ou voulez-vous dire quelque chose comme http://docs.python.org/2/library/os.html#os.removedirs ?

Il essaie de supprimer le parent de chaque répertoire supprimé jusqu'à ce qu'il échoue car le répertoire n'est pas vide. Donc, dans mon exemple d'arbre, os.removedirs('user/tester/noob') supprimerait d'abord noob, puis il essaierait de supprimer tester, ce qui est correct car il est vide, mais il s'arrêterait à user et laissez-le tranquille, car il contient developer, que nous ne voulons pas supprimer.

16
clacke