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.