8 votes

Utiliser Python os.walk pour identifier une liste de fichiers

Duplicata possible :
En Python, le moyen le plus rapide de construire une liste de fichiers dans un répertoire avec une certaine extension

J'utilise actuellement os.walk pour parcourir récursivement un répertoire en identifiant les fichiers .MOV.

def fileList():
    matches = []
    for root, dirnames, filenames in os.walk(source):
        for filename in fnmatch.filter(filenames, '*.mov'):
            matches.append(os.path.join(root, filename))
    return matches

Comment puis-je étendre cela pour identifier plusieurs fichiers, par exemple, .mov, .MOV, .avi, .mpg ?

Gracias.

23voto

Raymond Hettinger Points 231

Essayez quelque chose comme ça :

def fileList(source):
    matches = []
    for root, dirnames, filenames in os.walk(source):
        for filename in filenames:
            if filename.endswith(('.mov', '.MOV', '.avi', '.mpg')):
                matches.append(os.path.join(root, filename))
    return matches

2voto

DRH Points 3773

Une alternative utilisant os.path.splitext :

for root, dirnames, filenames in os.walk(source):
    filenames = [ f for f in filenames if os.path.splitext(f)[1] in ('.mov', '.MOV', '.avi', '.mpg') ]
    for filename in filenames:
        matches.append(os.path.join(root, filename))
return matches

2voto

Jhonathan Points 906
pattern = re.compile('.*\.(mov|MOV|avi|mpg)$')

def fileList(source):
   matches = []
   for root, dirnames, filenames in os.walk(source):
       for filename in filter(lambda name:pattern.match(name),filenames):
           matches.append(os.path.join(root, filename))
   return matches

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X