Parcourir un dossier avec os.scandir() en Python

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.

Sortie :

La syntaxe générale de la fonction est la suivante :

Sortie :

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.

Sortie possible :

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

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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

Sortie possible :

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.

Sortie possible :

Afficher uniquement les dossiers

De la même manière, la méthode is_dir() permet de sélectionner uniquement les répertoires.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

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/


Leave a Reply

Your email address will not be published. Required fields are marked *