Obtenir une liste de noms de fichiers et de répertoires en Python.

Affaires

Pour obtenir une liste de noms de fichiers et de répertoires (noms de dossiers) en Python, utilisez la fonction du module os.listdir().

os.listdir(path='.')
Renvoie une liste contenant les noms des entrées dans le répertoire spécifié par path.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Le module os est inclus dans la bibliothèque standard et n'a pas besoin d'être installé. Cependant, “import” est nécessaire.

Les informations suivantes sont fournies ici.

  • Obtenir une liste de noms de fichiers et de répertoires.
  • Obtenir une liste de noms de fichiers seulement
  • Obtenir une liste de noms de répertoires seulement

Voici un exemple de structure de fichier (répertoire).

.
└── testdir
    ├── dir1
    ├── dir2
    ├── file1
    ├── file2.txt
    └── file3.jpg

En plus de os.listdir(), vous pouvez également utiliser le module glob pour obtenir une liste de noms de fichiers et de répertoires (noms de dossiers). glob vous permet de spécifier des conditions en utilisant des caractères génériques (*), etc. et d'inclure récursivement des sous-répertoires.

Dans Python 3.4 et plus, il est également possible d'obtenir une liste de fichiers et de répertoires à l'aide du module pathlib, qui peut manipuler les chemins comme des objets. Comme globs ci-dessus, il peut également être utilisé de manière conditionnelle et récursive.

Obtenir une liste de noms de fichiers et de répertoires.

Si vous utilisez os.listdir() tel quel, il retournera une liste de noms de fichiers et de répertoires.

import os

path = "./testdir"

files = os.listdir(path)
print(type(files))  # <class 'list'>
print(files)        # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']

Ce que vous obtenez est une liste de chaînes de chemin.

Obtenir une liste de noms de fichiers seulement

Si vous voulez obtenir une liste de noms de fichiers uniquement, utilisez la fonction os.path.isfile() pour déterminer si le chemin est un fichier. Passer uniquement le nom du fichier comme argument de la fonction os.path.isfile() ne fonctionnera pas, passez donc le chemin complet comme indiqué ci-dessous.
os.path.isfile(os.path.join(path, f))

files = os.listdir(path)
files_file = [f for f in files if os.path.isfile(os.path.join(path, f))]
print(files_file)   # ['file1', 'file2.txt', 'file3.jpg']

Obtenir une liste de noms de répertoires seulement

Si vous voulez obtenir une liste de noms de répertoires seulement, utilisez os.path.isdir() de la même manière.

files = os.listdir(path)
files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))]
print(files_dir)    # ['dir1', 'dir2']