
I. Présentation
Dans ce tutoriel, nous allons apprendre à gérer nos dossiers avec Python, et de manière uniforme, que ce soit sous Linux ou Windows.
Le module os est un module standard de Python, disponible par défaut avec toute installation de Python 3. Il offre une multitude de fonctions pour manipuler les dossiers et interagir avec le système d’exploitation.
Si vous êtes nouveau en Python, je vous recommande de consulter notre article d’introduction pour installer les prérequis et acquérir les bases du langage :
Par ailleurs, pour la gestion des fichiers avec Python, retrouvez ce tutoriel :
Pour suivre ce tutoriel, je vous conseille d’utiliser le mode interactif de Python plutôt qu’un script. Cela rend l’apprentissage plus dynamique et interactif.
II. Importer le module OS
Pour commencer à utiliser le module os, il est nécessaire de l’importer dans votre session interactive ou script Python. Cela se fait simplement avec l’instruction suivante :
import os
Vous pouvez ensuite lister toutes les fonctions de ce module grâce à l’instruction suivante :
# Lister les attributs et méthodes du module os
dir(os)
Cette commande affichera une liste des attributs et des méthodes disponibles dans le module os. Nous n’utiliserons pas toutes les fonctions du module, mais nous nous concentrerons sur celles qui sont pertinentes pour la gestion des dossiers.
Pour plus d’informations sur une fonction spécifique, voici le lien de la documentation officielle : Documentation du module os. Cependant, celle-ci n’est pas simple à lire pour des débutants, nous allons donc voir quelques cas concrets dans cet article.
III. Utilisation des fonctions de gestion des dossiers
A. Lister les dossiers
Pour lister les dossiers et fichiers dans un répertoire donné, nous utilisons la fonction os.listdir(path). Voici un exemple :
# Lister les dossiers et fichiers dans le répertoire courant
os.listdir(“.”)
Cette fonction retourne une liste des noms des entrées dans le répertoire spécifié. Voyez plutôt :
>>> os.listdir(“/home/mickael”)
[‘.ssh’, ‘.docker’, ‘.bashrc’, ‘.vscode’, ‘Modèles’, ‘.npm’, ‘.config’, ‘.Xauthority’, ‘Bureau’, ‘mistral.ai-tests’, ‘.tmux.conf’, ‘.xsession-errors’, ‘.bashrc.original’, ‘.bash_history’, ‘Public’, ‘Documents’, ‘dockerdata’, ‘.xsession-errors.old’, ‘.zprofile’, ‘.profile’,[…]
Nous pouvons également lister la fonction os.scandir(path=’.’) permet de parcourir un répertoire et d’obtenir des informations sur chaque entrée. Elle retourne un objet os.DirEntry.
# Scanner un répertoire
>>> with os.scandir(“.”) as it:
… for entry in it:
… print(entry.name)
.ssh
.docker
.bashrc
.vscode
Modèles
Bureau
Documents
[…]
Dans le tutoriel précédent, nous avons vu la fonction os.path.isfile(), qui permet de vérifier si un chemin mène à un fichier ou un dossier.
B. Changer de répertoire
Pour changer le répertoire de travail courant, nous utiliserons la fonction os.chdir(path). Voici un exemple :
# Changer le répertoire de travail courant
os.chdir(“/nouveau/repertoire”)
Cette fonction change le répertoire courant pour le script en cours d’exécution. A tout moment, vous pouvez contrôle le répertoire dans lequel se trouve votre script avec la fonction os.getcwd(), pour Get Current Working Directory :
>>> os.getcwd()
‘/home/mickael’
Voici par exemple un bout de code qui contrôle si l’on est dans le répertoire /tmp/ et qui nous y positionne si ce n’est pas le cas :
>>> if (os.getcwd() != “/tmp”):
… os.chdir(‘/tmp’)
…
>>> os.getcwd()
‘/tmp’
C. Gérer la suppression des dossiers
Nous avons vu dans le tutoriel précédent sur la gestion de fichier que pour supprimer un fichier, nous pouvons utiliser la fonction os.remove(path). Cette fonction supprime le fichier spécifié par le chemin donné.
# Supprimer un fichier
os.remove(“fichier_a_supprimer.txt”)
La suppression d’un répertoire vide passe par la fonction os.rmdir(name). Pour supprimer un répertoire vide et tous ses sous-répertoires vides, nous pouvons utiliser la fonction os.removedirs(name).
# Supprimer un répertoire vide
os.rmdir(“chemin”)
# Supprimer des répertoires vides
os.removedirs(“chemin/vers/repertoire_vide”)
Dans le cas où le répertoire ciblé n’est pas vide, nous rencontrerons l’erreur suivante :
# Tentative de suppression d’un répertoire non vide
>>> os.removedirs(“/tmp/test1”)
Traceback (most recent call last):
File “”, line 1, in
File “”, line 243, in removedirs
OSError: [Errno 39] Directory not empty: ‘/tmp/test1’
Avec tout ce que nous venons d’apprendre, nous pouvons néanmoins supprimer tous les fichiers qui se trouvent dans le répertoire et ses sous-répertoires, puis supprimer le répertoire qui sera alors vide :
import os
def supprimer_repertoire(chemin):
“””Supprime un répertoire et tout son contenu de manière récursive.”””
# Parcourir le répertoire avec os.scandir
with os.scandir(chemin) as it:
for entry in it:
if entry.is_file():
# Supprimer le fichier
os.remove(entry.path)
elif entry.is_dir():
# Appel récursif pour supprimer le sous-répertoire
supprimer_repertoire(entry.path)
# Supprimer le répertoire de base une fois qu’il est vide
os.rmdir(chemin)
# Exemple d’utilisation
supprimer_repertoire(“/tmp/test”)
D. Renommer ou déplacer un fichier ou un répertoire
Pour renommer ou déplacer un fichier ou un répertoire, nous pouvons utiliser la même fonction que pour les fichiers, la fonction os.rename(src, dst). Cette fonction prend deux arguments : le chemin source et le chemin de destination.
# Renommer ou déplacer un fichier
os.rename(“/home/mickael/Documents/tutos”, “/home/mickael/Archives/tutos”)
Cette instruction fonctionnera pour déplacer un dossier, même si celui-ci contient des fichiers.
E. Créer un ou plusieurs dossiers
Pour créer un dossier avec Python, on peut utiliser la fonction os.mkdir(path), qui s’utilise finalement comme la commande sous Linux ou Windows :
>>> os.mkdir(“/tmp/test”)
Cependant, cette fonction ne permet de créer qu’un seul niveau à la fois. Si l’on souhaite créer un chemin de répertoires imbriqués (par exemple /tmp/test/tutoriels/python), il faut utiliser la fonction os.makedirs(path).
# Créer une arborescence complète de dossiers
os.makedirs(“/tmp/test/tutoriels/python”)
Cette commande créera tous les dossiers du chemin s’ils n’existent pas encore. Si le chemin existe déjà, une exception de type FileExistsError sera levée.
Pour éviter cette erreur, on peut ajouter le paramètre exist_ok=True :
# Créer les dossiers uniquement s’ils n’existent pas
os.makedirs(“/tmp/test/tutoriels/python”, exist_ok=True)
Cela permet d’écrire des scripts plus robustes, surtout lorsqu’on ne sait pas à l’avance si les dossiers existent déjà.
IV. Conclusion
Le module os est un très utile pour gérer les dossiers, les fichiers et interagir avec le système d’exploitation de manière uniforme, que ce soit sous Linux ou Windows.
En maîtrisant ces fonctions de base, vous serez en mesure de créer des scripts Python efficaces pour automatiser la gestion de vos fichiers.
Co-fondateur d’IT-Connect.fr.
Auditeur/Pentester chez Orange Cyberdéfense.