Les développeurs utilisent les fichiers dans les programmes Python pour un large éventail de raisons. Lorsque vous travaillez avec des fichiers, l'une des fonctions les plus importantes que vous devez connaître est la suppression d'un fichier.
Vous pouvez utiliser Python pour effectuer diverses opérations sur les fichiers et les dossiers, c'est-à-dire vérifier l'existence des fichiers, vérifier l'existence des dossiers et supprimer les fichiers et les dossiers.
En Python, vous pouvez utiliser la méthode os.remove() pour supprimer des fichiers, et la méthode os.rmdir() pour supprimer un dossier vide. Si vous voulez supprimer un dossier avec tous ses fichiers, vous pouvez utiliser la méthode shutil.rmtree(). Il est également possible de supprimer des fichiers et des dossiers en Python en utilisant des fonctions comme os.unlink('chemin_du_fichier'), pathlib.Path("chemin_du_fichier").unlink() et pathlib.Path(chemin_du_dossier_vide).rmdir().
Cet article explique comment supprimer des fichiers et des dossiers en utilisant des fonctions des modules os, pathlib et shutil.
Vous verez donc comment supprimer des fichiers et des dossiers en utilisant le langage Python, à l'aide de fonctions os.remove(), os.rmdir(), shutil.rmtree(), os.unlink("chemin_du_fichier"), pathlib.Path("chemin_du_fichier").unlink() et pathlib.Path("chemin_du_dossier_vide").rmdir(). Nous allons également passer en revue un exemple d'utilisation de chacune de ces méthodes pour supprimer un fichier ou un dossier.
Introduction
Parfois, une fois que vous avez travaillé avec votre fichier et que vous n'en avez plus besoin, vous pouvez le supprimer en utilisant python. Imaginons que, dans le cadre d'un vaste programme, vous deviez créer des fichiers pour stocker des données, mais que vous n'en ayez plus besoin après l'exécution du programme. C'est une bonne idée de supprimer ces fichiers, et nous allons voir comment le faire en utilisant python dans les sections suivantes de cet article.
Dans cet article, nous allons donc utiliser les fonctions Python suivantes pour supprimer des fichiers et des dossiers.
Fonction |
Description |
os.remove("chemin_du_fichier") |
Supprime le fichier spécifié. |
os.unlink('chemin_du_fichier') |
Supprime le fichier spécifié. Utile dans un environnement UNIX. |
pathlib.Path("chemin_du_fichier").unlink() |
Supprime le fichier ou le lien symbolique dans le chemin mentionné. |
os.rmdir("chemin_du_dossier_vide") |
Supprime le dossier vide. |
pathlib.Path("chemin_du_dossier_vide").rmdir() |
Délie et supprime le dossier vide. |
shutil.rmtree("chemin_du_dossier") |
Supprime un répertoire et les fichiers qu'il contient. |
Remarque :
- Toutes les fonctions ci-dessus suppriment les fichiers et les dossiers de façon permanente.
- Le module pathlib a été ajouté dans Python 3.4. Il est approprié lorsque votre application fonctionne sur différents systèmes d'exploitation.
Comment supprimer un fichier en Python ?
Python offre un support solide pour la gestion des fichiers. Nous pouvons supprimer des fichiers à l'aide de différentes méthodes, la plus courante étant la méthode os.remove(). Voici les étapes à suivre pour supprimer un fichier.
1. Trouver le chemin d'un fichier
Nous pouvons supprimer un fichier en utilisant à la fois le chemin relatif et le chemin absolu. Le chemin est l'emplacement du fichier sur le disque.
Un chemin absolu contient la liste complète des répertoires nécessaires pour localiser le fichier. Et un chemin relatif comprend le répertoire actuel, puis le nom du fichier.
Par exemple, /home/Tutsgrey/reports/samples.txt est un chemin absolu pour accéder au fichier samples.txt.
2. Utiliser la fonction os.remove() pour supprimer un fichier
Le module OS de Python fournit des méthodes pour interagir avec le système d'exploitation en Python. La méthode remove() de ce module est utilisée pour supprimer/effacer un chemin de fichier.
Tout d'abord, importez le module os et passez un chemin de fichier à la fonction os.remove("chemin_du_fichier") pour supprimer un fichier d'un disque.
3. Utiliser la fonction rmtree() du module shutil pour supprimer un répertoire
Importez le module shutil et passez le chemin du répertoire à la fonction shutil.rmtree("chemin") pour supprimer un répertoire et tous les fichiers qu'il contient.
Supprimer un fichier en Python avec la méthode os.remove()
Le code suivant explique comment supprimer un fichier nommé "sales_1.txt" avec la méthode os.remove().
Supposons que nous voulions supprimer le fichier sales_1.txt du répertoire E:\demos\files\. Actuellement, ce répertoire contient les fichiers suivants :
- sales_1.txt
- sales_2.csv
- profits.txt
- revenue.txt
Suppression d'un fichier avec un chemin relatif
import os
# supprimer un fichier avec un chemin relatif
os.remove("sales_1.txt")
Suppression d'un fichier avec le chemin absolu
import os
# supprime le fichier avec le chemin absolu
os.remove(r"E:\demos\files\sales_2.txt")
Notre code a supprimé deux fichiers. Voici la liste des fichiers restants dans notre répertoire :
Avant la suppression de fichiers :
Après la suppression de fichiers :
Comprendre la méthode os.remove()
Syntaxe :
os.remove(path, *, dir_fd = None)
Passez le chemin du fichier à la fonction os.remove('chemin_fichier') pour supprimer un fichier d'un disque.
Voici les paramètres que nous devons passer à la fonction:
- path : Un chemin relatif ou absolu pour l'objet fichier généralement au format chaîne de caractères.
- dir_fd : Un répertoire représentant l'emplacement du fichier. La valeur par défaut est None et cette valeur est ignorée dans le cas d'un chemin absolu.
Si le chemin du fichier passé est un répertoire, une erreur de type OSError sera levée.
Vérifier si le fichier existe avant de le supprimer
Une erreur de type FileNotFoundError sera levée si le fichier n'est pas trouvé dans le chemin d'accès. Il est donc conseillé de vérifier si le fichier existe avant de le supprimer.
Ceci peut être réalisé de deux manières :
- En utilisant la fonction os.path.exists("chemin_du_fichier") pour vérifier si le fichier existe.
- Ou en utilisant la gestion des exceptions.
Exemple 1 : En utilisant la fonction os.path.exists("chemin_du_fichier")
import os
file_path = r'E:\demos\files\sales_2.txt'
if os.path.exists(file_path):
os.remove(file_path)
else:
print("The system cannot find the file specified")
Remarque : La gestion des exceptions est recommandée plutôt que la vérification du fichier car le fichier pourrait être supprimé ou modifié entre-temps. C'est la manière Pythonic de supprimer un fichier qui peut ou non exister.
Exemple 2 : En utilisant la gestion des exceptions
import os
file_path = r'E:\demos\files\sales_21.txt'
try:
os.remove(file_path)
except:
print("The system cannot find the file specified")
# your code
Supprimer un fichier en utilisant la méthode os.unlink()
Si vous utilisez un système d'exploitation UNIX, utilisez la méthode unlink() disponible dans le module OS, qui est similaire à la méthode remove() sauf qu'elle est plus familière dans l'environnement UNIX.
Syntaxe :
os.unlink(path, *, dir_fd=None)
- path : Un chemin relatif ou absolu pour l'objet fichier, généralement au format chaîne de caractères.
- dir_fd : Un répertoire représentant l'emplacement du fichier. La valeur par défaut est None et cette valeur est ignorée dans le cas d'un chemin absolu.
Voyons le code permettant de supprimer le fichier "profits.txt" qui se trouve dans le chemin d'exécution actuel.
import os
os.unlink('profits.txt')
Supprimer un fichier avec le module Pathlib
Le module pathlib offre des classes représentant les chemins du système de fichiers avec une sémantique appropriée pour différents systèmes d'exploitation. Ainsi, lorsque nous devons travailler avec des fichiers dans plusieurs environnements, nous pouvons utiliser le module pathlib.
Le module pathlib a été ajouté dans Python 3.4. La méthode pathlib.Path.unlink() du module pathlib est utilisée pour supprimer le fichier dans le chemin mentionné.
Elle prend également un paramètre supplémentaire, à savoir missing_ok=False. Si le paramètre est défini à True, alors le module pathlib ignore l'erreur de type FileNotFoundError. Sinon, si le chemin n'existe pas, alors l'erreur de type FileNotFoundError sera levée.
Voyons le code pour supprimer le fichier "profits.txt" qui est présent dans le chemin d'exécution actuel.
- Importer un module pathlib
- Utiliser la méthode pathlib.Path() pour définir le chemin d'un fichier.
- Ensuite, pour supprimer un fichier, appelez la méthode unlink() sur un chemin de fichier donné.
import pathlib
# Setting the path for the file
file = pathlib.Path("profits.txt")
# Calling the unlink method on the path
file.unlink()
Supprimer tous les fichiers d'un répertoire
Parfois, nous voulons supprimer tous les fichiers d'un répertoire sans supprimer le répertoire. Suivez les étapes ci-dessous pour supprimer tous les fichiers d'un répertoire.
- Obtenez la liste des fichiers d'un répertoire en utilisant la fonction os.listdir(path). Elle renvoie une liste contenant les noms des fichiers et des dossiers dans le répertoire donné.
- Itérer sur la liste en utilisant une boucle for pour accéder à chaque fichier un par un.
- Supprimez chaque fichier en utilisant la fonction os.remove().
Exemple :
import os
path = r"E:\demos\files\reports\\"
for file_name in os.listdir(path):
# construct full file path
file = path + file_name
if os.path.isfile(file):
print('Deleting file:', file)
os.remove(file)
Supprimer un répertoire (ou un dossier) vide avec rmdir()
Bien qu'il soit toujours le cas qu'un répertoire contienne des fichiers, il y a parfois des dossiers ou des répertoires vides qui ne sont plus nécessaires. Nous pouvons les supprimer en utilisant la méthode rmdir() disponible à la fois dans le module os et le module pathlib.
Supprimer un dossier vide en utilisant de la méthode os.rmdir()
Afin de supprimer les dossiers vides, nous pouvons utiliser la fonction rmdir() du module os.
Syntaxe :
os.rmdir(path, *, dir_fd = None)
Voici les paramètres que nous devons passer à cette méthode :
- path : Un chemin relatif ou absolu pour l'objet répertoire généralement au format chaîne de caractères.
- dir_fd : Répertoire de fichiers. La valeur par défaut est None, et cette valeur est ignorée dans le cas d'un chemin absolu.
Remarque : Si le répertoire n'est pas vide, une erreur de type OSError sera générée.
import os
# Deleting an empty folder
directory = r"E:\pynative\old_logs"
os.rmdir(directory)
print("Deleted '%s' directory successfully" % directory)
Résultat :
Deleted 'E:\pynative\old_logs' directory successfully
Supprimer un dossier vide en utilisant de la méthode pathlib.Path.rmdir()
La méthode rmdir() du module pathlib est également utilisée pour supprimer un répertoire vide.
- Tout d'abord, définissez le chemin du répertoire
- Ensuite, appelez la méthode rmdir() sur ce chemin.
Voyons un exemple de suppression d'un répertoire vide appelé 'Images'.
import pathlib
# Deleting an empty folder
empty_dir = r"E:\pynative\old_images"
path = pathlib.Path(empty_dir)
path.rmdir()
print("Deleted '%s' directory successfully" % empty_dir)
Supprimer un répertoire non vide avec le module shutil
Parfois, nous avons besoin de supprimer un répertoire et tous les fichiers qu'il contient. Utilisez la méthode rmtree() du module shutil pour supprimer un répertoire et tous les fichiers qu'il contient.
Le module Python shutil permet d'effectuer des opérations de haut niveau dans un fichier ou une collection de fichiers, comme la copie ou la suppression de contenu.
Syntaxe :
shutil.rmtree(path, ignore_errors=False, onerror=None)
Paramètres :
- path : Le répertoire à supprimer. Les liens symboliques vers un répertoire ne sont pas acceptés.
- ignore_errors : Si cet indicateur a la valeur True, les erreurs dues à l'échec des suppressions seront ignorées. S'il est défini à False, l'erreur doit être gérée par la fonction passée dans l'attribut onerror.
Remarque : La fonction rmtree() supprime le dossier spécifié et tous ses sous-dossiers de manière récursive.
Prenons l'exemple suivant pour supprimer le dossier 'reports' qui contient des fichiers images et des fichiers pdf.
import shutil
# Deleting an non-empty folder
dir_path = r"E:\demos\files\reports"
shutil.rmtree(dir_path, ignore_errors=True)
print("Deleted '%s' directory successfully" % dir_path)
Résultat :
Deleted 'E:\demos\files\reports' directory successfully
Obtenir le message d'exception approprié lors de la suppression d'un répertoire non vide
Afin d'obtenir le message d'exception approprié, nous pouvons soit le traiter dans une fonction séparée dont nous pouvons passer le nom dans le paramètre onerror, soit le récupérer dans le bloc try-except.
import shutil
# Function for Exception Handling
def handler(func, path, exc_info):
print("We got the following exception")
print(exc_info)
# location
dir_path = r'E:\demos\files\reports'
# removing directory
shutil.rmtree(dir_path, ignore_errors=False, onerror=handler)
Code final : Pour supprimer un fichier ou un répertoire
import os
import shutil
def delete(path):
"""path could either be relative or absolute. """
# check if file or directory exists
if os.path.isfile(path) or os.path.islink(path):
# remove file
os.remove(path)
elif os.path.isdir(path):
# remove directory and all its content
shutil.rmtree(path)
else:
raise ValueError("Path {} is not a file or dir.".format(path))
# file
delete(r'E:\demos\files\reports\profits.txt')
# directory
delete(r'E:\demos\files\reports')
Suppression des fichiers correspondant à un critère
Par exemple, vous souhaitez supprimer des fichiers dont le nom contient une chaîne de caractères spécifique.
Le module Python glob, qui fait partie de la bibliothèque standard Python, est utilisé pour trouver les fichiers et les dossiers dont les noms suivent un critère spécifique.
Syntaxe :
glob.glob(pathname, *, recursive=False)
La méthode glob.glob() renvoie une liste de fichiers ou de dossiers qui correspondent au critère spécifié dans le paramètre pathname.
Cette fonction prend deux paramètres, à savoir le nom du chemin (pathname), et le paramètre recursive (s'il est défini à True, il recherchera les fichiers de manière récursive dans tous les sous-dossiers).
Nous pouvons utiliser les caractères génériques pour la correspondance des critères, et ce qui suit est la liste des caractères génériques utilisés dans la correspondance des critères.
- Astérisque (*) : Correspond à zéro ou plusieurs caractères
- Point d'interrogation (?) : correspond à un seul caractère
- On peut spécifier une plage de caractères alphanumériques à l'intérieur des [].
Suppression de fichiers avec une extension spécifique
Dans certaines occasions, nous devons supprimer tous les fichiers avec une extension particulière.
- Utilisez la méthode glob() pour trouver tous les fichiers texte dans un dossier.
- Utilisez la boucle for pour parcourir tous les fichiers
- Dans chaque itération, supprimer un seul fichier.
Voyons quelques exemples pour comprendre comment utiliser cette méthode pour supprimer les fichiers qui correspondent à un critère spécifique.
Exemple :
import glob
import os
# Search files with .txt extension in current directory
pattern = "*.txt"
files = glob.glob(pattern)
# deleting the files with txt extension
for file in files:
os.remove(file)
Supprimer le fichier dont le nom commence par une chaîne spécifique
import glob
import os
# Delete file whose name starts with string 'pro'
pattern = r"E:\demos\files\reports\pro*"
for item in glob.iglob(pattern, recursive=True):
os.remove(item)
Supprimer le fichier dont le nom contient une lettre spécifique
Nous pouvons donner une plage de caractères comme chaîne de recherche en les plaçant entre crochets ([]).
L'exemple suivant montre comment supprimer les fichiers dont le nom contient des caractères compris entre a et g.
import glob
import os
# search files like abc.txt, abd.txt
pattern = r"E:\demos\files_demos\reports\[a-g]*.txt"
for item in glob.iglob(pattern, recursive=True):
os.remove(item)
Suppression des fichiers correspondant à un motif dans tous les sous-dossiers
Alors que la fonction glob() trouve les fichiers à l'intérieur d'un dossier, il est possible de rechercher des fichiers à l'intérieur des sous-dossiers en utilisant la fonction iglob() qui est similaire à la fonction glob().
La fonction iglob() renvoie des options d'itérateur avec la liste des fichiers correspondant à un critère dans le dossier et son sous-dossier.
Nous devons définir l'indicateur récursif sur True lorsque nous recherchons les fichiers dans les sous-répertoires. Après le nom du dossier racine, nous devons passer ** pour la recherche dans les sous-répertoires.
import glob
import os
# Searching pattern inside folders and sub folders recursively
# search all jpg files
pattern = r"E:\demos\files\reports\**\*.jpg"
for item in glob.iglob(pattern, recursive=True):
# delete file
print("Deleting:", item)
os.remove(item)
# Uncomment the below code check the remaining files
# print(glob.glob(r"E:\demos\files_demos\reports\**\*.*", recursive=True))
Résultat :
Deleting: E:\demos\files\reports\profits.jpg
Deleting: E:\demos\files\reports\revenue.jpg
conclusion
Python fournit plusieurs modules permettant de supprimer des fichiers et des répertoires.
Pour supprimer des fichiers :
- Utilisez les fonctions os.remove() et os.unlink() pour supprimer un seul fichier.
- Utilisez pathlib.Path.unlink() pour supprimer un fichier si vous utilisez une version de Python > 3.4 et que l'application fonctionne sur différents systèmes d'exploitation.
Pour supprimer des répertoires :
- utilisez os.rmdir() ou pathlib.Path.rmdir() pour supprimer un répertoire vide
- utilisez shutil.rmtree() pour supprimer récursivement un répertoire et tous les fichiers qu'il contient.
Faites attention avant de supprimer des fichiers ou des répertoires car toutes les fonctions ci-dessus suppriment les fichiers et les répertoires de façon permanente.
Si vous pensez que cet article peut être utile à d'autres, n'hésitez pas à le partager !
Si vous avez des commentaires, si vous avez besoin d'aide ou si vous voulez simplement dire bonjour, n'hésitez pas à le faire dans les commentaires ci-dessous.