erknrio
2/7/2017 - 1:20 PM

Escanear directorios recursivamente en Python. FROM: http://stackoverflow.com/questions/33135038/how-do-i-use-os-scandir-to-return-direntry-

#!/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)