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

[seq]

matchar alla tecken i seq

[!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 eller False. Båda parametrarna normaliseras med hjälp av os.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 eller False; jämförelsen är skiftlägeskänslig och gäller inte os.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 en str.

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.