Comment obtenir une liste des fichiers d'un répertoire (dossier) avec python ?

Published: 26 mars 2015

DMCA.com Protection Status

Exemples de comment obtenir une liste des fichiers d'un dossier en utilisant python:

Avec la fonction listdir()

Avec python il est possible d'obtenir une liste de l'ensemble des fichiers situés dans un répertoire donné en utilsant os.listdir(). La fonction os.listdir() retourne une liste des fichiers et des répertoires situés dans le répertoire cible. Pour avoir uniquement les fichiers il suffit d'appliquer un simple filtre en utililant isfile() (voir). Illustration, supposons que le répertoire courant est composé comme ceci

dir01/
dir02/
fich01.txt
fich02.txt
fich02.txt

ou dir sont des répertoires et fich des fichiers. On a :

>>> import os
>>> list = os.listdir('.')
>>> print list
[dir01,dir02,fich01.txt,fich02.txt,fich03.txt]

Pour maintenant obtenir une liste des fichiers uniquement:

>>> FichList = [ f for f in os.listdir('.') if os.path.isfile(os.path.join('.',f)) ]
>>> print FichList
[fich01.txt,fich02.txt,fich03.txt]

Note: il est possible d'obtenir la liste des fichiers situés dans un répertoire quelconque en spécifiant le chemain complet il suffit de remplacer

>>> list = os.listdir('.')

par

>>> list = os.listdir('CheminDuRepCible')

Avec la fonction glob()

Exemple de cas: on veut obtenir une liste de tous les fichiers dans le dossier 'output' se terminant par '.hdf':

./output/
    MYD06_L2.A2014038.2300.061.2018052102433.hdf
    MYD06_L2.A2014033.1930.061.2018052042944.hdf
    MYD06_L2.A2014046.2210.061.2018052112538.hdf
    MYD06_L2.A2014058.2235.061.2018052141003.hdf
    MYD06_L2.A2014037.2045.061.2018052094723.hdf
    MYD06_L2.A2014054.2125.061.2018052131042.hdf
    MYD06_L2.A2014034.2015.061.2018052062330.hdf
    MYD06_L2.A2014059.2010.061.2018052140044.hdf
    .
    .
    .

Pour cela il existe le module python glob:

import glob

path_to_target = './outputs/modis/myd06/'

path_to_file_list = glob.glob(path_to_target + '*hdf' )

for path_to_file in path_to_file_list:
    print(path_to_file)

donne

./outputs/modis/myd06/MYD06_L2.A2014038.2300.061.2018052102433.hdf
./outputs/modis/myd06/MYD06_L2.A2014033.1930.061.2018052042944.hdf
./outputs/modis/myd06/MYD06_L2.A2014046.2210.061.2018052112538.hdf
./outputs/modis/myd06/MYD06_L2.A2014058.2235.061.2018052141003.hdf
./outputs/modis/myd06/MYD06_L2.A2014037.2045.061.2018052094723.hdf
./outputs/modis/myd06/MYD06_L2.A2014054.2125.061.2018052131042.hdf
./outputs/modis/myd06/MYD06_L2.A2014034.2015.061.2018052062330.hdf
./outputs/modis/myd06/MYD06_L2.A2014059.2010.061.2018052140044.hdf
.
.
.

Maintenant pour créer une liste avec les noms de fichiers uniquement, on peut utiliser les list comprehensions de python:

file_list = [i.split('/')[-1] for i in path_to_file_list]

print(file_list)

donne

['MYD06_L2.A2014038.2300.061.2018052102433.hdf', 'MYD06_L2.A2014033.1930.061.2018052042944.hdf', 'MYD06_L2.A2014046.2210.061.2018052112538.hdf', 'MYD06_L2.A2014058.2235.061.2018052141003.hdf', 'MYD06_L2.A2014037.2045.061.2018052094723.hdf', ... ]

Avec la fonction walk()

Avec python on peut facilement obtenir l'ensemble des fichiers et/ou des dossiers d'un répertoire en passant par la fonction walk du module os. Considérons la structure suivante en exemple:

folder/
    abcd.txt
    data.txt
    record.txt
    sub_directory/
        data.txt
        folder_3/

Pour obtenir la liste des fichiers dans le dossier folder on peut procéder comme suit:

>>> import os
>>> for path, subdirs, files in os.walk('folder'):
...     for name in files:
...             print(os.path.join(path, name))
... 
folder/abcd.txt
folder/data.txt
folder/record.txt
folder/sub_directory/data.txt

Références

Liens Site
os.listdir() python doc
How to list all files of a directory in Python stackoverflow
Calling an external command in Python stackoverflow
glob docs.python.org
List Comprehensions in Python pythonforbeginners.com
os.walk python doc
Python list directory, subdirectory, and files stackoverflow