fnmatch
— Unix mönstermatchning av filnamn¶
Källkod: Lib/fnmatch.py
Den här modulen ger stöd för jokertecken i Unix shell-stil, som inte är samma sak som reguljära uttryck (som dokumenteras i modulen re
). De specialtecken som används i jokertecken i shell-stil är:
Mönster |
Betydelse |
---|---|
|
matchar allt |
|
matchar alla enskilda tecken |
|
matchar alla tecken i seq |
|
matchar alla tecken som inte finns i seq |
För en bokstavlig matchning omsluter du metatecknen inom parentes. Till exempel matchar '[?]'
tecknet '?'
.
Observera att filnamnsseparatorn ('/'
på Unix) inte är speciell för den här modulen. Se modulen glob
för expansion av sökvägsnamn (glob
använder filter()
för att matcha sökvägssegment). På samma sätt är filnamn som börjar med en punkt inte speciella för den här modulen, och matchas av mönstren *
och ?
.
Om inget annat anges hänvisar ”filnamnssträng” och ”mönstersträng” antingen till str
eller ISO-8859-1
kodade bytes
-objekt. Observera att de funktioner som dokumenteras nedan inte tillåter att man blandar ett bytes
-mönster med ett str
-filnamn, och vice versa.
Observera slutligen att functools.lru_cache()
med en maxsize på 32768 används för att cacha de (typade) kompilerade regexmönstren i följande funktioner: fnmatch()
, fnmatchcase()
, filter()
, filterfalse()
.
- fnmatch.fnmatch(name, pat)¶
Testar om filnamnssträngen name matchar mönstersträngen pat och returnerar
True
ellerFalse
. Båda parametrarna normaliseras med hjälp avos.path.normcase()
.fnmatchcase()
kan användas för att utföra en skiftlägeskänslig jämförelse, oavsett om det är standard för operativsystemet.Detta exempel skriver ut alla filnamn i den aktuella katalogen med tillägget
.txt
:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
- fnmatch.fnmatchcase(name, pat)¶
Testa om filnamnssträngen name matchar mönstersträngen pat och returnera
True
ellerFalse
; jämförelsen är skiftlägeskänslig och gäller inteos.path.normcase()
.
- fnmatch.filter(names, pat)¶
Konstruerar en lista från de element i iterable av filnamnssträngar names som matchar mönstersträngen pat. Det är samma sak som
[n for n in names if fnmatch(n, pat)]
, men implementeras mer effektivt.
- fnmatch.filterfalse(names, pat)¶
Konstruerar en lista från de element i iterable av filnamnssträngar names som inte matchar mönstersträngen pat. Det är samma sak som
[n for n in names if not fnmatch(n, pat)]
, men implementeras mer effektivt.Tillagd i version 3.14.
- fnmatch.translate(pat)¶
Returnerar skalmönstret pat konverterat till ett reguljärt uttryck för användning med
re.match()
. Mönstret förväntas vara enstr
.Exempel:
>>> 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'>
Se även
- Modul
glob
Sökvägsexpansion i Unix-shell-stil.