Lister les répertoires et fichiers, ... mais pas tous
Le
Laurent Claessens

Bonjour
J'ai besoin de lister les fichiers et sous-répertoires d'un certain
gros répertoire (1000 sous-répertories au moins)
La base de mon script est de faire
for root, dirs, files in os.walk(HOME):
Mon problème est le suivant. Je veux exclure certains répertoires de
la liste (et leurs sous-répertoires)
Bien entendu, je peux encore faire
for root, dirs, files in os.walk(HOME):
et tester si root est dans la liste des répertoires à exclure.
Seulement, cela est un énorme problème de rapidité : même si un
répertoire est exclu, la boucle for va quand même en lire tout le
contenu récursivement.
D'où ma question : est-ce qu'il existe une méthode pour lister les
répertoires et fichiers récursivement en excluant certains répertoire=
s
(et leurs sous-répertoires) ?
Je peux évidement faire la récursion à la main (en utilisant
os.listdir), mais je voudrais savoir si il y a une méthode plus
standard.
Bonne soirée
Laurent
J'ai besoin de lister les fichiers et sous-répertoires d'un certain
gros répertoire (1000 sous-répertories au moins)
La base de mon script est de faire
for root, dirs, files in os.walk(HOME):
Mon problème est le suivant. Je veux exclure certains répertoires de
la liste (et leurs sous-répertoires)
Bien entendu, je peux encore faire
for root, dirs, files in os.walk(HOME):
et tester si root est dans la liste des répertoires à exclure.
Seulement, cela est un énorme problème de rapidité : même si un
répertoire est exclu, la boucle for va quand même en lire tout le
contenu récursivement.
D'où ma question : est-ce qu'il existe une méthode pour lister les
répertoires et fichiers récursivement en excluant certains répertoire=
s
(et leurs sous-répertoires) ?
Je peux évidement faire la récursion à la main (en utilisant
os.listdir), mais je voudrais savoir si il y a une méthode plus
standard.
Bonne soirée
Laurent
Bonjour,
Il me semble que justement os.walk est fait pour ça ...
sauf qu'il faut exclure les répertoires indésirables
de dirs et non pas quand on est déjà dedans en testant
la valeur de root (c'est ce que tu fais si j'ai bien
compris)
Ensuite, si dirs est vraiment grand, il faut sans
doute faire un truc rusé pour éliminer les répertoires
indésirables de dirs ... Pour moi, ce n'est pas le cas
et j'ai juste fait
try:
dirs.remove('CVS')
except ValueError:
pass
qui est l'exemple de la doc d'ailleurs.
Cordialement,
K.
Justement, sans avoir testé, je n'en suis pas certain. Dans le manuel
de os.walk(top[, topdown=True[, onerror=None[, followlinksúlse]]]):
"When topdown is True, the caller can modify the dirnames list in-place
(perhaps using del or slice assignment), and walk() will only recurse
into the subdirectories whose names remain in dirnames; this can be
used to prune the search, [etc.]"
Pas le temps d'essayer, mais je le ferai...
--
Pierre Maurette
Youpie, c'est ce que je cherchais.
Au fait, quand vous parlez de "la doc", moi j'ai le document
Python Library Reference de Guido van Rossum (qui contient le bou
cité). C'est bon, ou vous me conseillez un autre ?
Merci et bonne journée
Laurent
Perso., je consulte la doc. en ligne.
Pour le module os, c'est
http://docs.python.org/library/os.html
mais c'est en anglais.
K.