Lecture libre, sans compteChapitre 2 · Manipuler des fichiers et dossiers

Parcourir et lister des fichiers avec le module os

Introduction

Mise en situation

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

python
1import os

2. 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é.

python
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

python
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.

python
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éDescriptionExemple
dossier_actuelChemin du dossier en cours d'exploration"Documents/2024"
sous_dossiersListe des sous-dossiers présents['Janvier', 'Février']
fichiersListe 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.

python
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

FonctionRôleRenvoie
os.listdir(chemin)Liste le contenu d'un dossier (non récursif)Liste de noms
os.walk(chemin)Parcourt un dossier et ses sous-dossiersGénérateur de triplets
os.path.isfile(chemin)Vérifie si c'est un fichierBooléen
os.path.isdir(chemin)Vérifie si c'est un dossierBooléen
os.path.join(a, b)Construit un chemin proprementChaîne de caractères
os.path.splitext(nom)Sépare nom et extensionTuple (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 que os.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

Mini-Quiz
Question 1 / 3

Quelle fonction permet d'explorer un dossier ET tous ses sous-dossiers automatiquement ?

En bref

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