La función os.scandir(path)
Python 3.5 devuelve objetos DirEntry ligeros que son muy útiles con información sobre archivos. Sin embargo, solo funciona para el camino inmediato que se le entrega. ¿Hay una manera de envolverlo en una función recursiva para que visite todos los subdirectorios debajo de la ruta dada?
Puede escanear recursivamente usando os.walk()
, o si necesita objetos DirEntry
o más control, escriba una función recursiva como scantree()
continuación:
try: from os import scandir except ImportError: from scandir import scandir # use scandir PyPI module on Python < 3.5 def scantree(path): """Recursively yield DirEntry objects for given directory.""" for entry in scandir(path): if entry.is_dir(follow_symlinks=False): yield from scantree(entry.path) # see below for Python 2.x else: yield entry if __name__ == '__main__': import sys for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'): print(entry.path)
Notas:
'.'
y ese tipo de cosa. follow_symlinks=false
en las llamadas is_dir()
en funciones recursivas como esta, para evitar los bucles de enlaces simbólicos. En Python 2.x, reemplace el yield from
línea con:
for entry in scantree(entry.path): yield entry