- À propos de os.scandir()
- Parcourir le dossier courant avec os.scandir()
- Parcourir un dossier spécifique
- Utiliser les objets DirEntry
- Distinguer les fichiers et les dossiers
- Afficher uniquement les fichiers ou les dossiers
- Filtrer les fichiers selon leur extension
- Obtenir des informations sur les fichiers
- Utiliser os.scandir() avec with
- Différences entre os.scandir() et os.listdir()
La fonction os.scandir() permet de parcourir le contenu d'un dossier en Python. Contrairement à os.listdir(), elle ne retourne pas simplement les noms des éléments : elle fournit des objets contenant directement des informations utiles sur les fichiers et les dossiers. Nous allons découvrir son fonctionnement et apprendre à exploiter les objets DirEntry.
1. À propos de os.scandir()
La fonction os.scandir() appartient au module os. Elle permet de parcourir les éléments contenus dans un répertoire et retourne un itérateur produisant des objets os.DirEntry.
Avant d'utiliser os.scandir(), nous devons importer le module os. L'exemple suivant vérifie simplement que le module est disponible.
1 2 | import os print("Module os importé avec succès.") |
Sortie :
1 | Module os importé avec succès. |
La syntaxe générale de la fonction est la suivante :
1 | os.scandir(chemin) |
Sortie :
1 | Un itérateur contenant des objets os.DirEntry. |
Le paramètre chemin est facultatif. Lorsqu'il n'est pas indiqué, os.scandir() parcourt le répertoire courant.
2. Parcourir le dossier courant avec os.scandir()
Appelée sans argument, la fonction os.scandir() permet de parcourir le dossier de travail courant. Chaque élément retourné est un objet DirEntry. Sa propriété name permet d'obtenir son nom.
1 2 3 | import os for element in os.scandir(): print(element.name) |
Sortie possible :
1 2 3 4 | cours.py exercice.py documents images |
La propriété element.name retourne uniquement le nom du fichier ou du dossier, sans ajouter son chemin complet.
Utiliser le chemin "."
Le symbole . représente le dossier courant. Nous pouvons donc l'indiquer explicitement à os.scandir().
1 2 3 | import os for element in os.scandir("."): print(element.name) |
Sortie possible :
1 2 3 4 | cours.py exercice.py documents images |
3. Parcourir un dossier spécifique
Pour parcourir un dossier particulier, il suffit de transmettre son chemin à os.scandir(). Supposons que le dossier documents contienne deux fichiers et un sous-dossier.
1 2 3 | import os for element in os.scandir("documents"): print(element.name) |
Sortie possible :
1 2 3 | cours.pdf notes.txt images |
Utiliser un chemin absolu sous Windows
Nous pouvons également transmettre un chemin absolu. Sous Windows, une chaîne brute précédée de r permet d'écrire facilement un chemin contenant des antislashs.
1 2 3 | import os for element in os.scandir(r"C:\Users\dell\Documents"): print(element.name) |
Sortie possible :
1 2 3 4 | cours Python rapport.docx notes.txt |
4. Utiliser les objets DirEntry
L'un des principaux intérêts de os.scandir() est que chaque élément retourné est un objet DirEntry. Cet objet possède plusieurs propriétés et méthodes permettant d'obtenir directement des informations sur l'élément.
La propriété name fournit le nom de l'élément tandis que la propriété path fournit son chemin.
1 2 3 4 | import os for element in os.scandir("documents"): print("Nom :", element.name) print("Chemin :", element.path) |
Sortie possible :
1 2 3 4 5 6 | Nom : cours.pdf Chemin : documents\cours.pdf Nom : notes.txt Chemin : documents\notes.txt Nom : images Chemin : documents\images |
L'objet DirEntry propose notamment les éléments suivants : name, path, is_file(), is_dir() et stat().
5. Distinguer les fichiers et les dossiers
Les méthodes is_file() et is_dir() permettent de déterminer directement si un objet DirEntry correspond respectivement à un fichier ou à un dossier.
1 2 3 4 5 6 | import os for element in os.scandir(): if element.is_file(): print(element.name, ": fichier") elif element.is_dir(): print(element.name, ": dossier") |
Sortie possible :
1 2 3 4 | cours.py : fichier exercice.py : fichier documents : dossier images : dossier |
Avec os.scandir(), il n'est donc généralement pas nécessaire de construire manuellement le chemin de chaque élément pour utiliser os.path.isfile() ou os.path.isdir().
Tester la nature d'un élément
Nous pouvons également afficher directement les valeurs booléennes retournées par is_file() et is_dir().
1 2 3 4 5 | import os for element in os.scandir(): print(element.name) print("Fichier :", element.is_file()) print("Dossier :", element.is_dir()) |
Sortie possible :
1 2 3 4 5 6 | cours.py Fichier : True Dossier : False documents Fichier : False Dossier : True |
6. Afficher uniquement les fichiers ou les dossiers
La méthode is_file() permet de filtrer les résultats afin d'afficher uniquement les fichiers contenus dans le dossier.
1 2 3 4 | import os for element in os.scandir(): if element.is_file(): print(element.name) |
Sortie possible :
1 2 3 | cours.py exercice.py notes.txt |
Afficher uniquement les dossiers
De la même manière, la méthode is_dir() permet de sélectionner uniquement les répertoires.
1 2 3 4 | import os for element in os.scandir(): if element.is_dir(): print(element.name) |
Sortie possible :
1 2 3 | documents images projets |
Créer une liste des fichiers
Nous pouvons utiliser une compréhension de liste afin de construire directement une liste contenant uniquement les noms des fichiers.
1 2 3 | import os fichiers = [element.name for element in os.scandir() if element.is_file()] print(fichiers) |
Sortie possible :
1 | ['cours.py', 'exercice.py', 'notes.txt'] |
7. Filtrer les fichiers selon leur extension
La méthode endswith() peut être combinée avec element.name pour sélectionner uniquement les fichiers possédant une certaine extension. Dans l'exemple suivant, nous recherchons les fichiers Python.
1 2 3 4 | import os for element in os.scandir(): if element.is_file() and element.name.endswith(".py"): print(element.name) |
Sortie possible :
1 2 3 | cours.py exercice.py programme.py |
Filtrer plusieurs extensions
La méthode endswith() accepte également un tuple. Nous pouvons ainsi rechercher plusieurs extensions simultanément. L'utilisation de lower() permet de ne pas tenir compte des différences entre majuscules et minuscules dans les extensions.
1 2 3 4 | import os for element in os.scandir(): if element.is_file() and element.name.lower().endswith((".jpg", ".jpeg", ".png")): print(element.name) |
Sortie possible :
1 2 3 | photo.jpg logo.png image.jpeg |
8. Obtenir des informations sur les fichiers
Un objet DirEntry possède une méthode stat() permettant d'obtenir différentes informations sur un fichier. L'attribut st_size fournit notamment sa taille en octets.
1 2 3 4 5 | import os for element in os.scandir(): if element.is_file(): informations = element.stat() print(element.name, ":", informations.st_size, "octets") |
Sortie possible :
1 2 3 | cours.py : 1250 octets exercice.py : 840 octets notes.txt : 320 octets |
Afficher la taille en kilo-octets
Pour obtenir une valeur plus lisible, nous pouvons diviser la taille exprimée en octets par 1024 afin d'obtenir approximativement la taille en kilo-octets.
1 2 3 4 5 | import os for element in os.scandir(): if element.is_file(): taille = element.stat().st_size / 1024 print(element.name, ":", round(taille, 2), "Ko") |
Sortie possible :
1 2 3 | cours.py : 1.22 Ko exercice.py : 0.82 Ko notes.txt : 0.31 Ko |
Afficher la date de dernière modification
L'attribut st_mtime retourné par stat() représente la date de dernière modification sous forme d'un timestamp. Nous pouvons utiliser le module datetime pour convertir cette valeur en une date lisible.
1 2 3 4 5 6 7 | import os from datetime import datetime for element in os.scandir(): if element.is_file(): timestamp = element.stat().st_mtime date = datetime.fromtimestamp(timestamp) print(element.name, ":", date) |
Sortie possible :
1 2 3 | cours.py : 2026-09-26 09:15:30 exercice.py : 2026-09-25 18:42:10 notes.txt : 2026-09-24 14:20:05 |
9. Utiliser os.scandir() avec with
L'objet retourné par os.scandir() utilise des ressources du système. Il est donc recommandé, notamment lorsque le traitement est important, de l'utiliser avec l'instruction with. Le gestionnaire de contexte assure la fermeture de l'itérateur à la fin du bloc.
1 2 3 4 | import os with os.scandir("documents") as elements: for element in elements: print(element.name) |
Sortie possible :
1 2 3 | cours.pdf notes.txt images |
À la sortie du bloc with, l'itérateur est automatiquement fermé. Cette écriture est donc particulièrement adaptée lorsque nous souhaitons gérer proprement les ressources utilisées par os.scandir().
Utiliser with pour sélectionner les fichiers
Nous pouvons naturellement combiner le gestionnaire de contexte avec les méthodes de DirEntry. L'exemple suivant affiche uniquement les fichiers du dossier documents.
1 2 3 4 5 | import os with os.scandir("documents") as elements: for element in elements: if element.is_file(): print(element.name) |
Sortie possible :
1 2 3 | cours.pdf notes.txt rapport.docx |
10. Différences entre os.scandir() et os.listdir()
Les fonctions os.listdir() et os.scandir() permettent toutes les deux de parcourir le contenu d'un répertoire, mais elles ne retournent pas les mêmes informations.
- os.listdir() retourne une liste contenant principalement les noms des éléments.
- os.scandir() retourne un itérateur produisant des objets DirEntry.
- Avec os.scandir(), la propriété name fournit directement le nom de l'élément.
- La propriété path fournit son chemin.
- Les méthodes is_file() et is_dir() permettent de déterminer facilement la nature de l'élément.
- La méthode stat() permet d'accéder à différentes métadonnées du fichier.
L'exemple suivant utilise os.listdir(). Le résultat contient uniquement les noms des éléments.
1 2 3 | import os elements = os.listdir("documents") print(elements) |
Sortie possible :
1 | ['cours.pdf', 'notes.txt', 'images'] |
Avec os.scandir(), nous pouvons exploiter directement les informations associées à chaque entrée. L'exemple suivant affiche le nom et la nature de chaque élément.
1 2 3 4 5 6 7 | import os with os.scandir("documents") as elements: for element in elements: if element.is_file(): print(element.name, ": fichier") elif element.is_dir(): print(element.name, ": dossier") |
Sortie possible :
1 2 3 | cours.pdf : fichier notes.txt : fichier images : dossier |
En résumé, os.listdir() convient très bien lorsqu'il suffit de récupérer les noms des éléments d'un dossier. os.scandir() est particulièrement pratique lorsqu'il faut également connaître leur nature, leur chemin ou leurs métadonnées.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


