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 |
|
reconnaît n’importe quel caractère dans 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
ouFalse
. La casse de chacun des paramètres peut être normalisée en utilisantos.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
ouFalse
; la comparaison est sensible à la casse et n’utilise pas la fonctionos.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