11.8. "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 "?".

fnmatch.fnmatch(filename, pattern)

   Testa se a string *filename* corresponde à string *pattern*,
   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 file in os.listdir('.'):
          if fnmatch.fnmatch(file, '*.txt'):
              print(file)

fnmatch.fnmatchcase(filename, pattern)

   Testa se *filename* corresponde ao *pattern*, retornando "True" ou
   "False"; a comparação diferencia maiúsculas de minúsculas e não se
   aplica "os.path.normcase()".

fnmatch.filter(names, pattern)

   Retorna o subconjunto da lista de *names* que correspondem
   *pattern*. É o mesmo que "[n for n in names if fnmatch(n,
   pattern)]", mas implementado com mais eficiência.

fnmatch.translate(pattern)

   Retorna o *pattern* no estilo shell convertido em uma expressão
   regular para usar com "re.match()".

   Exemplo:

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

Ver também:

  Módulo "glob"
     Expansão de caminho no estilo shell do Unix.
