3473 votes

Comment supprimer un fichier ou un dossier en Python ?

Comment supprimer un fichier ou un dossier ?

7voto

Somnath Muluk Points 10173

Pour supprimer des fichiers :

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.

Pour supprimer des dossiers :

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.

Pour supprimer les dossiers de manière récursive vers le parent :

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

3voto

Isaac Turner Points 101

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.

1 votes

shutil.rmtree() supprime non seulement le répertoire mais aussi son contenu.

3voto

bitranox Points 69

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.

2voto

Sarender Reddy Points 43

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))

-1voto

Miladiouss Points 642

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)

3 votes

Le sous-processus est une pratique à éviter

3 votes

Je ne recommanderais pas subprocess pour ça. shutil.rmtree fait rm -r Il fait très bien son travail, avec en prime la possibilité de fonctionner sous Windows.

Prograide.com

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.

Powered by:

X