11.8. "fnmatch" — Filtrage par motif des noms de fichiers Unix
**************************************************************

**Code source :** Lib/fnmatch.py

======================================================================

Ce module fournit la gestion des caractères de remplacement de style
shell Unix, qui ne sont *pas* identiques à ceux utilisés dans les
expressions régulières (documentés dans le module "re"). Les
caractères spéciaux utilisés comme caractères de remplacement de style
shell sont :

+--------------+--------------------------------------+
| Motif        | Signification                        |
|==============|======================================|
| "*"          | reconnaît n'importe quoi             |
+--------------+--------------------------------------+
| "?"          | reconnaît n'importe quel caractère   |
|              | unique                               |
+--------------+--------------------------------------+
| "[seq]"      | reconnaît n'importe quel caractère   |
|              | dans *seq*                           |
+--------------+--------------------------------------+
| "[!seq]"     | reconnaît n'importe quel caractère   |
|              | qui n'est pas dans *seq*             |
+--------------+--------------------------------------+

Pour une correspondance littérale, il faut entourer le métacaractère
par des crochets. Par exemple, "'[?]'" reconnaît le caractère "'?'".

Note that the filename separator ("'/'" on Unix) is *not* special to
this module.  See module "glob" for pathname expansion ("glob" uses
"filter()" to match pathname segments).  Similarly, filenames starting
with a period are not special for this module, and are matched by the
"*" and "?" patterns.

fnmatch.fnmatch(filename, pattern)

   Teste si la chaîne de caractères *filename* correspond au motif
   *pattern*, en renvoyant "True" ou "False". La casse de chacun des
   paramètres peut être normalisée en utilisant "os.path.normcase()".
   "fnmatchcase()" peut être utilisée pour réaliser une comparaison
   sensible à la casse, indépendamment du système d'exploitation.

   Cet exemple affiche tous les noms de fichiers du répertoire courant
   ayant pour extension ".txt" :

      import fnmatch
      import os

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

fnmatch.fnmatchcase(filename, pattern)

   Teste si *filename* correspond au motif *pattern*, en renvoyant
   "True" ou "False" ; la comparaison est sensible à la casse et
   n'utilise pas la fonction "os.path.normcase()".

fnmatch.filter(names, pattern)

   Renvoie un sous-ensemble de la liste *names* correspondant au motif
   *pattern*. Similaire à "[n for n in names if fnmatch(n, pattern)]",
   mais implémenté plus efficacement.

fnmatch.translate(pattern)

   Renvoie le motif *pattern*, de style shell, converti en une
   expression régulière utilisable avec "re.match()".

   Exemple :

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

Voir aussi:

  Module "glob"
     Recherche de chemins de style shell Unix
