En Python, la forma más rápida de crear una lista de archivos en un directorio con una cierta extensión

En Python en un sistema GNU / Linux, ¿cuál es la forma más rápida de escanear recursivamente un directorio para todos los archivos .MOV o .AVI , y almacenarlos en una lista?

Puede usar os.walk () para caminar recuresivo y glob.glob () o fnmatch.filter () para la coincidencia de archivos:

Verifica esta respuesta

Usaría os.walk para escanear el directorio, os.path.splitext para capturar el sufijo y filtrarlos yo mismo.

 suffixes = set(['.AVI', '.MOV']) for dirpath, dirnames, filenames in os.walk('.'): for f in filenames: if os.path.splitext(f)[1] in suffixes: yield os.path.join(dirpath, f) 

Ejemplo para una lista de archivos en el directorio actual. Puedes expandir esto para caminos específicos.

 import glob movlist = glob.glob('*.mov') 
 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 

Python 2.x:

 import os def generic_tree_matching(rootdirname, filterfun): return [ os.path.join(dirname, filename) for dirname, dirnames, filenames in os.walk(rootdirname) for filename in filenames if filterfun(filename)] def matching_ext(rootdirname, extensions): "Case sensitive extension matching" return generic_tree_matching( rootdirname, lambda fn: fn.endswith(extensions)) def matching_ext_ci(rootdirname, extensions): "Case insensitive extension matching" try: extensions= extensions.lower() except AttributeError: # assume it's a sequence of extensions extensions= tuple( extension.lower() for extension in extensions) return generic_tree_matching( rootdirname, lambda fn: fn.lower().endswith(extensions)) 

Use matching_ext o matching_ext_ci con argumentos de la carpeta raíz y una extensión o una tupla de extensiones:

 >>> matching_ext(".", (".mov", ".avi")) 

Sugiero el uso de os.walk y una lectura cuidadosa de su documentación .

Este puede ser un enfoque de una sola línea:

 [f for root,dirs,files in os.walk('/your/path') for f in files if is_video(f)] 

Donde en is_video compruebas tus extensiones.