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

Notons que le séparateur de nom de fichiers ("'/'" sous Unix) n'est
*pas* traité de manière spéciale par ce module. Voir le module "glob"
pour la recherche de chemins ("glob" utilise "filter()" pour
reconnaître les composants d'un chemin). De la même manière, les noms
de fichiers commençant par un point ne sont pas traités de manière
spéciale par ce module, et sont reconnus par les motifs "*" et "?".

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')
   <re.Match object; span=(0, 10), match='foobar.txt'>

Voir aussi:

  Module "glob"
     Recherche de chemins de style shell Unix
