Comment supprimer un fichier ou un dossier ?
shutil.rmtree()
supprime non seulement le répertoire mais aussi son contenu.
os.unlink(path, *, dir_fd=None)
ou
os.remove(path, *, dir_fd=None)
Les deux fonctions sont sémantiquement identiques. Cette fonction supprime (efface) le chemin du fichier. Si le chemin n'est pas un fichier et qu'il s'agit d'un répertoire, alors une exception est levée.
shutil.rmtree(path, ignore_errors=False, onerror=None)
ou
os.rmdir(path, *, dir_fd=None)
Afin de supprimer des arborescences entières de répertoires, shutil.rmtree()
peut être utilisé. os.rmdir
ne fonctionne que si le répertoire est vide et existe.
os.removedirs(name)
Il supprime tous les répertoires parents vides avec self jusqu'à ce que le parent ait du contenu.
ex. os.removedirs('abc/xyz/pqr') supprimera les répertoires par ordre 'abc/xyz/pqr', 'abc/xyz' et 'abc' s'ils sont vides.
Pour plus d'informations, consultez le document officiel : os.unlink
, os.remove
, os.rmdir
, shutil.rmtree
, os.removedirs
Pour éviter le TOCTOU question mise en évidence par Commentaire d'Éric Araujo vous pouvez attraper une exception pour appeler la bonne méthode :
def remove_file_or_dir(path: str) -> None:
""" Remove a file or directory """
try:
shutil.rmtree(path)
except NotADirectoryError:
os.remove(path)
Desde shutil.rmtree()
ne supprimera que les répertoires et os.remove()
ou os.unlink()
ne supprimera que les fichiers.
Ma préférence personnelle est de travailler avec des objets pathlib - cela offre une manière plus pythique et moins sujette aux erreurs d'interagir avec le système de fichiers, surtout si vous développez du code multiplateforme.
Dans ce cas, vous pouvez utiliser pathlib3x - il offre un backport de la dernière (à la date d'écriture de cette réponse Python 3.10.a0) Python pathlib pour Python 3.6 ou plus récent, et quelques fonctions supplémentaires comme "copy", "copy2", "copytree", "rmtree" etc ...
Il enveloppe également shutil.rmtree
:
$> python -m pip install pathlib3x
$> python
>>> import pathlib3x as pathlib
# delete a directory tree
>>> my_dir_to_delete=pathlib.Path('c:/temp/some_dir')
>>> my_dir_to_delete.rmtree(ignore_errors=True)
# delete a file
>>> my_file_to_delete=pathlib.Path('c:/temp/some_file.txt')
>>> my_file_to_delete.unlink(missing_ok=True)
vous pouvez le trouver sur github ou PyPi
Disclaimer : Je suis l'auteur de la bibliothèque pathlib3x.
Pour supprimer tous les fichiers du dossier
import os
import glob
files = glob.glob(os.path.join('path/to/folder/*'))
files = glob.glob(os.path.join('path/to/folder/*.csv')) // It will give all csv files in folder
for file in files:
os.remove(file)
Pour supprimer tous les dossiers d'un répertoire
from shutil import rmtree
import os
// os.path.join() # current working directory.
for dirct in os.listdir(os.path.join('path/to/folder')):
rmtree(os.path.join('path/to/folder',dirct))
Je recommande d'utiliser subprocess
si écrire un code beau et lisible est votre tasse de thé :
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
Et si vous n'êtes pas un ingénieur logiciel, vous pouvez envisager d'utiliser Jupyter ; vous pouvez simplement taper des commandes bash :
!rm -r my_dir
Traditionnellement, vous utilisez shutil
:
import shutil
shutil.rmtree(my_dir)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.