1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
import os
from fnmatch import fnmatch
#############################################################################
def listefichiers(repertoire, selections=['*'], niveau=0):
"""affiche les répertoires et les fichiers conformes aux sélections"""
# lecture des noms du répertoire
try:
noms = os.listdir(repertoire)
except Exception:
print
print u"Impossible de rentrer dans le répertoire ", repertoire
return
# enregistrement des sous-répertoires et des fichiers sélectionnés
reperts, fichiers = [], []
for nom in noms:
if os.path.isdir(os.path.join(repertoire, nom)):
# enregistrement du répertoire trouvé
reperts.append(nom)
else:
# enregistrement du fichier trouvé qui respecte la sélection
ok = False
for selection in selections:
if fnmatch(nom, selection):
# on a trouve un motif de selection qui marche
ok = True
break
if ok:
fichiers.append(nom)
# tris alphabétique sans tenir compte de la casse
reperts.sort(key=lambda v: v.upper())
fichiers.sort(key=lambda v: v.upper())
# affichage
okrep = False
for fichier in fichiers:
if not okrep: # n'afficher que les répert. ayant des fichiers sélectionnés
print
print repertoire
okrep = True
print "-"*niveau + fichier
# traitement des sous-répertoires
for repert in reperts:
listefichiers(os.path.join(repertoire, repert), selections, niveau+1) |