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.