J'ai un problème avec la suppression de répertoires vides. Voici mon code:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
L'argument dir_to_search
est l'endroit où je passe le répertoire où le travail doit être effectué. Ce répertoire ressemble à ceci:
test/20/...
test/22/...
test/25/...
test/26/...
Notez que tous les dossiers ci-dessus sont vides. Lorsque j'exécute ce script, les dossiers20
, 25
seul est supprimé! Mais les dossiers 25
et 26
ne sont pas supprimés, même s'il s'agit de dossiers vides.
Éditer:
Les exceptions que je reçois sont:
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/26'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/25'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27/tmp'
Où est-ce que je fais une erreur?
rmdir /path/to/25th/folder
supprimer le répertoire entier. Ce qui signifie que ce répertoire est vide!Réponses:
Essayez
shutil.rmtree
:la source
rmtree
répertoire entier a été supprimé? Je suppose qu'il est similaire à celuirm -Rf $DIR
import os for root, dirs, files in os.walk(top, topdown=False): for name in dirs: os.rmdir(os.path.join(root, name))
Le comportement par défaut de
os.walk()
est de marcher de la racine à la feuille. Mettretopdown=False
àos.walk()
marcher de la feuille à la racine.la source
Voici mon
pathlib
dissociateur de répertoire purement récursif:la source
Essayez
rmtree()
àshutil
partir de la bibliothèque standard Pythonla source
rmtree
répertoire entier a été supprimé? Je suppose qu'il est similaire à celuirm -Rf $DIR
il vaut mieux utiliser le chemin absolu et importer uniquement la fonction rmtree
from shutil import rmtree
car il s'agit d'un gros package, la ligne ci-dessus n'importera que la fonction requise.la source
rmtree()
; passhutil.rmtree()
Juste pour le prochain gars à la recherche d'une solution de micropython, cela fonctionne purement basé sur os (listdir, remove, rmdir). Il n'est ni complet (surtout dans la gestion des erreurs) ni fantaisiste, il fonctionnera cependant dans la plupart des cas.
la source
La commande (donnée par Tomek) ne peut pas supprimer un fichier, s'il est en lecture seule . par conséquent, on peut utiliser -
la source
NameError: name 'stat' is not defined
. Comment a-t-il été défini?Voici une autre solution pure-pathlib , mais sans récursivité:
la source
Voici une solution récursive:
la source
Pour les utilisateurs de Linux, vous pouvez simplement exécuter la commande shell de manière pythonique
où
rm
est synonyme de supprimer et-r
pour récursivela source