Glob es un término general utilizado para definir técnicas para hacer coincidir patrones específicos de acuerdo con las reglas relacionadas con el shell de Unix. Los sistemas y shells Linux y Unix también admiten glob y también proporcionan funciones glob()
en las bibliotecas del sistema.
En Python, el módulo glob se usa para recuperar archivos/nombres de rutas que coinciden con un patrón específico. Las reglas de patrón de glob siguen las reglas estándar de expansión de rutas de Unix. También se predice que, según los puntos de referencia, es más rápido que otros métodos para hacer coincidir los nombres de ruta en los directorios. Con glob, también podemos usar comodines ("*, ?, [ranges])
además de la búsqueda de strings exactas para hacer que la recuperación de rutas sea más simple y conveniente.
Nota: este módulo viene integrado con Python, por lo que no es necesario instalarlo externamente.
Ejemplo:
# Python program to demonstrate # glob using different wildcards import glob print('Named explicitly:') for name in glob.glob('/home/geeks/Desktop/gfg/data.txt'): print(name) # Using '*' pattern print('\nNamed with wildcard *:') for name in glob.glob('/home/geeks/Desktop/gfg/*'): print(name) # Using '?' pattern print('\nNamed with wildcard ?:') for name in glob.glob('/home/geeks/Desktop/gfg/data?.txt'): print(name) # Using [0-9] pattern print('\nNamed with wildcard ranges:') for name in glob.glob('/home/geeks/Desktop/gfg/*[0-9].*'): print(name)
Producción :
Uso de la función Glob() para encontrar archivos recursivamente
Podemos usar la función glob.glob()
o glob.iglob()
directamente desde el módulo glob para recuperar rutas recursivamente desde dentro de los directorios/archivos y subdirectorios/subarchivos.
Sintaxis:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
Nota: Cuando se establece recursivo, True
“ **
” seguido del separador de ruta ('./**/')
coincidirá con cualquier archivo o directorio.
Ejemplo:
# Python program to find files # recursively using Python import glob # Returns a list of names in list files. print("Using glob.glob()") files = glob.glob('/home/geeks/Desktop/gfg/**/*.txt', recursive = True) for file in files: print(file) # It returns an iterator which will # be printed simultaneously. print("\nUsing glob.iglob()") for filename in glob.iglob('/home/geeks/Desktop/gfg/**/*.txt', recursive = True): print(filename)
Producción :
For older versions of python:
The most simple method is to use os.walk() as it is specifically designed and optimized to allow recursive browsing of a directory tree. Or we can also use os.listdir() to get all the files in directory and subdirectories and then filter out.
Veámoslo a través de un ejemplo-
Ejemplo:
# Python program to find files # recursively using Python import os # Using os.walk() for dirpath, dirs, files in os.walk('src'): for filename in files: fname = os.path.join(dirpath,filename) if fname.endswith('.c'): print(fname) """ Or We can also use fnmatch.filter() to filter out results. """ for dirpath, dirs, files in os.walk('src'): for filename in fnmatch.filter(files, '*.c'): print(os.path.join(dirpath, filename)) # Using os.listdir() path = "src" dir_list = os.listdir(path) for filename in fnmatch.filter(dir_list,'*.c'): print(os.path.join(dirpath, filename))
Producción :
./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c