Parcourir et lister des fichiers avec le module os
Introduction
Vous êtes stagiaire en informatique dans une PME. Le service comptabilité stocke des milliers de factures (PDF, images, fichiers Excel) dans un dossier unique sans aucun classement.
Votre défi
Votre mission : écrire un script Python capable d'explorer ce dossier, de lister tous les fichiers présents, et de filtrer uniquement les factures PDF pour préparer un archivage automatique.
En Python, le module os (pour operating system) permet d'interagir avec le système de fichiers de votre ordinateur : lister des fichiers, créer des dossiers, vérifier des chemins, etc. C'est un outil indispensable pour automatiser toute tâche impliquant des fichiers.
Pourquoi utiliser os pour parcourir des fichiers ?
Sans automatisation, explorer un dossier contenant des milliers de fichiers pour n'en garder que certains types serait extrêmement long. Avec os, quelques lignes de code suffisent.
Les fonctions essentielles du module os
1. Importer le module
1import os2. Lister le contenu d'un dossier avec os.listdir()
Cette fonction renvoie une liste de tous les noms de fichiers et dossiers présents dans un répertoire donné.
1import os
2
3# Lister le contenu du dossier "Documents"
4contenu = os.listdir("Documents")
5print(contenu)
6
7# Résultat possible :
8# ['facture_001.pdf', 'photo.jpg', 'notes.txt', 'sous_dossier']⚠️ Attention :
os.listdir()renvoie aussi bien des fichiers que des dossiers, sans les distinguer directement ! Il faut vérifier leur nature avec d'autres fonctions.
3. Vérifier si c'est un fichier ou un dossier
1import os
2
3chemin = "Documents/facture_001.pdf"
4
5if os.path.isfile(chemin):
6 print("C'est un fichier")
7elif os.path.isdir(chemin):
8 print("C'est un dossier")4. Parcourir récursivement avec os.walk()
Si vous devez explorer un dossier et tous ses sous-dossiers, os.walk() est l'outil parfait.
1import os
2
3for dossier_actuel, sous_dossiers, fichiers in os.walk("Documents"):
4 print(f"📁 Dossier : {dossier_actuel}")
5 for f in fichiers:
6 print(f" 📄 {f}")os.walk() renvoie à chaque itération un triplet :
| Élément retourné | Description | Exemple |
|---|---|---|
dossier_actuel | Chemin du dossier en cours d'exploration | "Documents/2024" |
sous_dossiers | Liste des sous-dossiers présents | ['Janvier', 'Février'] |
fichiers | Liste des fichiers présents | ['facture.pdf', 'notes.txt'] |
5. Filtrer les fichiers par extension
Pour ne garder que certains types de fichiers (ex : les PDF), on combine os.listdir() avec une condition sur le nom.
1import os
2
3dossier = "Documents"
4factures_pdf = []
5
6for element in os.listdir(dossier):
7 chemin_complet = os.path.join(dossier, element)
8 if os.path.isfile(chemin_complet) and element.endswith(".pdf"):
9 factures_pdf.append(element)
10
11print("Factures trouvées :", factures_pdf)💡 À retenir :
os.path.join()construit un chemin de fichier de manière sûre, en gérant automatiquement les séparateurs (/sur Mac/Linux,\sur Windows).
Comparatif des principales fonctions
| Fonction | Rôle | Renvoie |
|---|---|---|
os.listdir(chemin) | Liste le contenu d'un dossier (non récursif) | Liste de noms |
os.walk(chemin) | Parcourt un dossier et ses sous-dossiers | Générateur de triplets |
os.path.isfile(chemin) | Vérifie si c'est un fichier | Booléen |
os.path.isdir(chemin) | Vérifie si c'est un dossier | Booléen |
os.path.join(a, b) | Construit un chemin proprement | Chaîne de caractères |
os.path.splitext(nom) | Sépare nom et extension | Tuple (nom, extension) |
Essayez par vous-même
Simulateur de filtrage de fichiers
Entrez une extension et voyez quels fichiers seraient sélectionnés dans ce dossier simulé.
Le saviez-vous ?
Le saviez-vous ?
Le module os existe depuis les toutes premières versions de Python (1994) ! Il a été conçu pour offrir une interface unique et portable, permettant d'écrire un code qui fonctionne aussi bien sur Windows, macOS que Linux, malgré leurs différences de gestion de fichiers.
— Documentation officielle Python - docs.python.org
Points clés à retenir
💡 À retenir :
os.listdir()explore un seul niveau de dossier, tandis queos.walk()explore récursivement tous les sous-dossiers. Choisissez la bonne fonction selon votre besoin !
⚠️ Attention : N'oubliez jamais de vérifier si un élément listé est un fichier ou un dossier avant de le traiter, sinon votre script risque de planter en tentant d'ouvrir un dossier comme un fichier.
🎯 En pratique : Pour un script de tri automatique de factures, combinez
os.walk()(pour explorer tous les sous-dossiers) avec une condition sur l'extension (.endswith(".pdf")) pour ne garder que les fichiers pertinents.
Mini-quiz
Quelle fonction permet d'explorer un dossier ET tous ses sous-dossiers automatiquement ?
En bref
- 1os.listdir() liste le contenu d'un dossier sur un seul niveau, alors que os.walk() explore récursivement tous les sous-dossiers.
- 2Utilisez os.path.isfile() et os.path.isdir() pour distinguer fichiers et dossiers, et os.path.join() pour construire des chemins de manière sûre.
- 3Filtrer des fichiers par type se fait simplement en testant la fin du nom avec la méthode .endswith(), par exemple .endswith('.pdf').