glob
— Expansión del patrón de nombres de ruta de estilo Unix¶
Código fuente: Lib/glob.py
The glob
module finds all the pathnames matching a specified pattern
according to the rules used by the Unix shell, although results are returned in
arbitrary order. No tilde expansion is done, but *
, ?
, and character
ranges expressed with []
will be correctly matched. This is done by using
the os.scandir()
and fnmatch.fnmatch()
functions in concert, and
not by actually invoking a subshell.
Note that files beginning with a dot (.
) can only be matched by
patterns that also start with a dot,
unlike fnmatch.fnmatch()
or pathlib.Path.glob()
.
(For tilde and shell variable expansion, use os.path.expanduser()
and
os.path.expandvars()
.)
Para una coincidencia literal, envuelve los meta-caracteres en corchetes. Por ejemplo, '[?]'
empareja el caracter '?'
.
Ver también
El módulo pathlib
ofrece objetos ruta de alto nivel.
-
glob.
glob
(pathname, *, root_dir=None, dir_fd=None, recursive=False)¶ Return a possibly empty list of path names that match pathname, which must be a string containing a path specification. pathname can be either absolute (like
/usr/src/Python-1.5/Makefile
) or relative (like../../Tools/*/*.gif
), and can contain shell-style wildcards. Broken symlinks are included in the results (as in the shell). Whether or not the results are sorted depends on the file system. If a file that satisfies conditions is removed or added during the call of this function, whether a path name for that file be included is unspecified.Si root_dir no es
None
, debería ser un path-like object que especifique el directorio raíz para la búsqueda. Tiene el mismo efecto englob()
que cambiar el directorio actual antes de llamarlo. Si pathname es relativo, el resultado contendrá rutas relativas a root_dir.Esta función puede admitir rutas relativas a descriptores de directorio con el parámetro dir_fd.
Si recursive es verdadero, el patrón «
**
» coincidirá con cualquier fichero y cero o más directorios, subdirectorios y enlaces simbólicos a directorios. Si el patrón va seguido de unos.sep
oos.altsep
los ficheros no coincidirán.Lanza un evento de auditoría
glob.glob
con los argumentospathname
,recursive
.Lanza un auditing event
glob.glob/2
con argumentospathname
,recursive
,root_dir
,dir_fd
.Nota
El uso del patrón «
**
» en árboles de directorios grandes podría consumir una cantidad de tiempo excesiva.Distinto en la versión 3.5: Soporte para globs recursivos usando «
**
».Distinto en la versión 3.10: Se agregaron los parámetros root_dir y dir_fd.
-
glob.
iglob
(pathname, *, root_dir=None, dir_fd=None, recursive=False)¶ Retorna un iterador el cual produce los mismos valores que
glob()
sin necesidad de almacenarlos todos de forma simultánea.Lanza un evento de auditoría
glob.glob
con los argumentospathname
,recursive
.Lanza un auditing event
glob.glob/2
con argumentospathname
,recursive
,root_dir
,dir_fd
.Distinto en la versión 3.5: Soporte para globs recursivos usando «
**
».Distinto en la versión 3.10: Se agregaron los parámetros root_dir y dir_fd.
-
glob.
escape
(pathname)¶ Escapa todos los caracteres especiales (
'?'
,'*'
y'['
). Esto es útil si deseas coincidir una cadena de caracteres literal arbitraria que podría contener caracteres especiales. Los caracteres especiales en unidades compartidas/UNC no se eluden, e.g. en Windowsescape('//?/c:/Quo vadis?.txt')
retorna'//?/c:/Quo vadis[?].txt'
.Nuevo en la versión 3.4.
Por ejemplo, considera un directorio que contenga los siguientes ficheros: 1.gif
, 2.txt
, card.gif
y un subdirectorio sub
el cual contenga solo el fichero 3.txt
. glob()
producirá los siguientes resultados. Nótese como se preservará cualquier componente inicial de la ruta.
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
>>> glob.glob('**/*.txt', recursive=True)
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']
Si un directorio contiene ficheros que comienzan con .
no coincidirá por defecto. Por ejemplo, considera un directorio que contiene card.gif
y .card.gif
:
>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']
Ver también
- Módulo
fnmatch
Expansión de nombre de fichero (no de ruta) al estilo de la terminal