Escanear directorios recursivamente en Python. FROM: http://stackoverflow.com/questions/33135038/how-do-i-use-os-scandir-to-return-direntry-objects-recursively-on-a-directory#answer-33135143
#!/usr/bin/env python3
try:
from os import scandir
except ImportError:
from scandir import scandir # use scandir PyPI module on Python < 3.5
def scantree(path):
import fnmatch
"""Recursively yield DirEntry objects for given directory."""
ignored_elements = [".*"]
ignored_elements_size = len(ignored_elements)
element_not_matched = True
continue_loop = True
entryclean = ''
i = 0
for entry in scandir(path):
i = 0
while continue_loop:
# Reemplazamos el caracter de comienzo ./ para evitar
# coincidencias indeseadas
entryclean = entry.path.replace('./', '')
if i >= ignored_elements_size:
continue_loop = False
elif fnmatch.fnmatch(entryclean, ignored_elements[i]):
# Si encontramos el elemento dentro de la lista de
# elementos a ignorar entonces excluimos dicho
# elemento de nuestra lista de entradas a devolver.
continue_loop = False
element_not_matched = False
i += 1
if entry.is_dir(follow_symlinks=False):
yield from scantree(entry.path) # see below for Python 2.x
elif element_not_matched:
yield entry
if __name__ == '__main__':
import sys
# Si le pasamos un path al programa este comenzara a hacer
# el escaneado de directorios desde el punto recibido
# de lo contrario usa la ruta actual
for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'):
print(entry.path)