# 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