11.7. :mod: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, ao contrário de fnmatch.fnmatch(), glob trata nomes de arquivos que começam com um ponto (.) como casos especiais. (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, *, 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).

If recursive is true, the pattern “**” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep, only directories and subdirectories match.

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 “**”.

glob.iglob(pathname, *, recursive=False)

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

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)