# `fnmatch` — Correspondência de padrões de nome de arquivo Unix

Código-fonte: Lib/fnmatch.py

Este módulo fornece suporte para curingas no estilo shell do Unix, que não são iguais às expressões regulares (documentadas no módulo `re`). Os caracteres especiais usados nos curingas no estilo de shell são:

Padrão | Significado
--- | ---
`*` | corresponde a tudo
`?` | Corresponde a qualquer caractere único
`[seq]` | corresponde a qualquer caractere em seq
`[!seq]` | corresponde a qualquer caractere ausente em seq

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

Note que o separador de nome de arquivo (`'/'` no Unix) não é especial para este módulo. Veja o módulo `glob` para expansão do nome do caminho (`glob` usa `filter()` para corresponder aos segmentos do nome do caminho). Da mesma forma, os nomes de arquivos que começam com um ponto final não são especiais para este módulo e são correspondidos pelos padrões `*` e `?`.

A menos que indicado de outra forma, “string de nome de arquivo” e “string de padrão” referem-se a objetos `str` ou `bytes` codificados em `ISO-8859-1`. Observe que as funções documentadas abaixo não permitem misturar um padrão `bytes` com um nome de arquivo `str` e vice-versa.

Finalmente, observe também que `functools.lru_cache()` com um maxsize de 32768 é usado para armazenar em cache os padrões de regex compilados (tipados) nas seguintes funções: `fnmatch()`, `fnmatchcase()`, `filter()`.

fnmatch.fnmatch(name, pat)

  Testa se a string do nome de arquivo name corresponde à string de padrão pat, retornando `True` ou `False`. Ambos os parâmetros são normalizados em maiúsculas e minúsculas usando `os.path.normcase()`. `fnmatchcase()` pode ser usado para realizar uma comparação com distinção entre maiúsculas e minúsculas, independentemente de ser padrão para o sistema operacional.

  Este exemplo vai exibir todos os nomes de arquivos no diretório atual com a extensão `.txt`:

      import fnmatch
      import os

      for arquivo in os.listdir('.'):
          if fnmatch.fnmatch(arquivo, '*.txt'):
              print(arquivo)

fnmatch.fnmatchcase(name, pat)

  Testa se a string do nome de arquivo name corresponde à string de padrão pat, retornando `True` ou `False`; a comparação diferencia maiúsculas de minúsculas e não se aplica a `os.path.normcase()`.

fnmatch.filter(names, pat)

  Constrói uma lista a partir daqueles elementos do iterável de strings de nome de arquivo names que correspondem à string de padrão pat. É o mesmo que `[n for n in names if fnmatch(n, pat)]`, mas implementado com mais eficiência.

fnmatch.translate(pat)

  Retorna o padrão pat no estilo shell convertido em uma expressão regular para usar com `re.match()`. O padrão é esperado ser um `str`.

  Exemplo:

      >>> import fnmatch, re
      >>>
      >>> regex = fnmatch.translate('*.txt')
      >>> regex
      '(?s:.*\\.txt)\\Z'
      >>> reobj = re.compile(regex)
      >>> reobj.match('foobar.txt')
      <re.Match object; span=(0, 10), match='foobar.txt'>

Ver também

Módulo `glob`

  Expansão de caminho no estilo shell do Unix.