glob – Coincidencia de patrón de nombre de archivo

El módulo Glob busca todos los nombres de ruta en busca de archivos que coincidan con un patrón específico de acuerdo con las reglas dictadas por el shell de Unix. Los resultados así obtenidos se devuelven en orden arbitrario. Algunos requisitos necesitan atravesar una lista de archivos en alguna ubicación, en su mayoría con un patrón específico. El módulo global de Python tiene varias funciones que pueden ayudar a enumerar archivos que coinciden con un patrón determinado en una carpeta específica.  

La coincidencia de patrones se realiza mediante las funciones os.scandir() y fnmatch.fnmatch() , y no mediante la invocación de una subcapa. A diferencia de fnmatch.fnmatch(), glob trata los nombres de archivo que comienzan con un punto (.) como casos especiales. Para la expansión de variables de shell y tilde, se utilizan las funciones os.path.expanduser() y os.path.expandvars() .

Reglas de patrón 

  • Siga las reglas estándar de expansión de rutas de Unix.
  • Caracteres especiales admitidos: dos comodines diferentes: *, ? y rangos de caracteres expresados ​​en [].
  • Las reglas de patrón se aplican a segmentos del nombre de archivo (deteniéndose en el separador de ruta, /).
  • Las rutas en el patrón pueden ser relativas o absolutas.

Solicitud

  • Es útil en cualquier situación en la que su programa necesite buscar una lista de archivos en el sistema de archivos con nombres que coincidan con un patrón.
  • Si necesita una lista de nombres de archivo que tengan una cierta extensión, prefijo o cualquier string común en el medio, use glob en lugar de escribir código para escanear el contenido del directorio usted mismo.

Funciones en Glob:

  • glob(pathname, *, recursive=False): devuelve una lista de nombres de rutas que coinciden con el nombre de ruta proporcionado, que debe ser una string que contenga una especificación de ruta. La lista también puede estar vacía.
  • iglob(pathname, *, recursive=False): este método crea un objeto generador de Python que se utiliza para listar archivos en un directorio determinado. También devuelve un iterador que produce los mismos valores que glob() sin almacenarlos todos simultáneamente.
  • escape(pathname)- Permite escapar de la secuencia de caracteres dada. Puede encontrarlo útil para ubicar archivos con ciertos caracteres en sus nombres de archivo y hacer coincidir una string literal arbitraria que puede tener caracteres especiales.

A continuación se muestra la implementación para ayudarlo a comprender cómo se puede poner en práctica este módulo:

Ejemplo 1:

Python3

import glob
  
# search .py files
# in the current working directory
for py in glob.glob("*.py"):
    print(py)

Producción :

Ejemplo 2: Programa para representar rangos y caracteres comodín

Si recursivo es verdadero, el patrón «**» coincidirá con cualquier archivo y cero o más directorios, subdirectorios y enlaces simbólicos a directorios. El uso del patrón «**» en árboles de directorios grandes puede consumir una cantidad excesiva de tiempo. 

Python3

import glob
  
# Using character ranges []
print('Finding file using character ranges [] :- ')
print(glob.glob('./[0-9].*'))
  
# Using wildcard character *
print('\n Finding file using wildcard character * :- ')
print(glob.glob('*.gif'))
  
# Using wildcard character ?
print('\n Finding file using wildcard character ? :- ')
print(glob.glob('?.gif'))
  
# Using recursive attribute
print('\n Finding files using recursive attribute :- ')
print(glob.glob('**/*.txt', recursive=True))

Producción :

Ejemplo 3:

Python3

import glob
  
gen = glob.iglob("*.py")
# returns class type of gen
type(gen)
  
for py in gen:
    print(py)

Producción :

Ejemplo 4:

Python3

import glob
  
char_seq = "-_#"
  
for spcl_char in char_seq:
    esc_set = "*" + glob.escape(spcl_char) + "*" + ".py"
      
    for py in (glob.glob(esc_set)):
        print(py)

Producción :

Publicación traducida automáticamente

Artículo escrito por tusharbhadak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *