glob — Expansão de padrão de nome de arquivo no estilo Unix

Código-fonte: Lib/glob.py


O módulo glob encontra todos os nomes de caminho que correspondem a um padrão especificado de acordo com as regras usadas pelo shell Unix, embora os resultados sejam retornados em ordem arbitrária. Nenhuma expansão de til é feita, mas *, ? e os intervalos de caracteres expressos com [] serão correspondidos corretamente. Isso é feito usando as funções os.scandir() e fnmatch.fnmatch() em conjunto, e não invocando realmente um subshell.

Observe que arquivos iniciados com um ponto (.) só podem ser correspondidos com padrões que também iniciam com um ponto, ao contrário de fnmatch.fnmatch() ou pathlib.Path.glob(). (Para expansão de til e variável de shell, use os.path.expanduser() e os.path.expandvars().)

Para uma correspondência literal, coloque os metacaracteres entre colchetes. Por exemplo, '[?]' corresponde ao caractere '?'.

Ver também

O módulo pathlib oferece objetos de caminho de alto nível.

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.

Se root_dir não for None, deve ser um objeto caminho ou similar especificando o diretório raiz para pesquisa. Tem o mesmo efeito em glob() que alterar o diretório atual antes de chamá-lo. Se pathname for relativo, o resultado conterá caminhos relativos a root_dir.

Esta função oferece suporte para caminhos relativos aos descritores de diretório com o parâmetro dir_fd.

Se recursive for verdadeiro, o padrão “**” corresponderá a qualquer arquivo e zero ou mais diretórios, subdiretórios e links simbólicos para diretórios. Se o padrão for seguido por um os.sep ou os.altsep, então os arquivos não irão corresponder.

Levanta um evento de auditoria glob.glob com os argumentos pathname, recursive.

Levanta um evento de auditoria glob.glob/2 com os argumentos pathname, recursive, root_dir, dir_fd.

Nota

Usar o padrão “**” em grandes árvores de diretório pode consumir uma quantidade excessiva de tempo.

Alterado na versão 3.5: Suporte a globs recursivos usando “**”.

Alterado na versão 3.10: Adicionados os parâmetros root_dir e dir_fd.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False)

Retorna um iterador que produz os mesmos valores que glob() sem realmente armazená-los todos simultaneamente.

Levanta um evento de auditoria glob.glob com os argumentos pathname, recursive.

Levanta um evento de auditoria glob.glob/2 com os argumentos pathname, recursive, root_dir, dir_fd.

Alterado na versão 3.5: Suporte a globs recursivos usando “**”.

Alterado na versão 3.10: Adicionados os parâmetros root_dir e dir_fd.

glob.escape(pathname)

Escapa todos os caracteres especiais ('?', '*' e '['). Isso é útil se você deseja corresponder a uma string literal arbitrária que pode conter caracteres especiais. Os caracteres especiais nos pontos de compartilhamento de unidade/UNC não têm escape, por exemplo, no Windows escape('//?/c:/Quo vadis?.txt') retorna '//?/c:/Quo vadis[?].txt'.

Novo na versão 3.4.

Por exemplo, considere um diretório contendo os seguintes arquivos: 1.gif, 2.txt, card.gif e um subdiretório sub que contém apenas o arquivo 3.txt. glob() produzirá os seguintes resultados. Observe como todos os componentes principais do caminho são preservados.

>>> 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/']

Se o diretório contém arquivos começando com . eles não serão correspondidos por padrão. Por exemplo, considere um diretório contendo card.gif e .card.gif

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']

Ver também

Módulo fnmatch

Expansão de nome de arquivo no estilo shell (não caminho)