fnmatch — Unix-Dateinamen-Mustervergleich

Quellcode: Lib/fnmatch.py


Dieses Modul bietet Unterstützung für Unix-Shell-Wildcards, die sich *nicht* mit regulären Ausdrücken (die im Modul re dokumentiert sind) decken. Die Sonderzeichen, die in Shell-Wildcards verwendet werden, sind

Muster

Bedeutung

*

entspricht allem

?

entspricht einem einzelnen Zeichen

[seq]

entspricht einem beliebigen Zeichen in seq

[!seq]

entspricht einem beliebigen Zeichen, das *nicht* in seq ist

Für eine exakte Übereinstimmung umschließen Sie die Metazeichen mit eckigen Klammern. Zum Beispiel entspricht '[?]' dem Zeichen '?'.

Beachten Sie, dass der Trenner für Dateinamen ('/' unter Unix) für dieses Modul *nicht* speziell ist. Informationen zur Pfadnamenserweiterung finden Sie im Modul glob ( glob verwendet filter(), um Pfadnamensegmente abzugleichen). Ebenso sind Dateinamen, die mit einem Punkt beginnen, für dieses Modul nicht speziell und werden von den Mustern * und ? abgeglichen.

Sofern nicht anders angegeben, beziehen sich „Dateinamen-String“ und „Muster-String“ entweder auf str oder auf mit ISO-8859-1 kodierte bytes-Objekte. Beachten Sie, dass die unten dokumentierten Funktionen das Mischen eines bytes-Musters mit einem str-Dateinamen und umgekehrt nicht zulassen.

Schließlich beachten Sie, dass functools.lru_cache() mit einer maximalen Größe von 32768 verwendet wird, um die (getypten) kompilierten Regex-Muster in den folgenden Funktionen zu cachen: fnmatch(), fnmatchcase(), filter(), filterfalse().

fnmatch.fnmatch(name, pat)

Prüft, ob der Dateinamen-String name mit dem Muster-String pat übereinstimmt, und gibt True oder False zurück. Beide Parameter werden mithilfe von os.path.normcase() normalisiert. fnmatchcase() kann verwendet werden, um einen fallempfindlichen Vergleich durchzuführen, unabhängig davon, ob dies für das Betriebssystem standardmäßig ist.

Dieses Beispiel gibt alle Dateinamen im aktuellen Verzeichnis mit der Erweiterung .txt aus.

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
fnmatch.fnmatchcase(name, pat)

Prüft, ob der Dateinamen-String name mit dem Muster-String pat übereinstimmt, und gibt True oder False zurück; der Vergleich ist fallempfindlich und wendet os.path.normcase() nicht an.

fnmatch.filter(names, pat)

Erstellt eine Liste aus den Elementen des Iterable von Dateinamen-Strings names, die mit dem Muster-String pat übereinstimmen. Dies ist dasselbe wie [n for n in names if fnmatch(n, pat)], ist aber effizienter implementiert.

fnmatch.filterfalse(names, pat)

Erstellt eine Liste aus den Elementen des Iterable von Dateinamen-Strings names, die *nicht* mit dem Muster-String pat übereinstimmen. Dies ist dasselbe wie [n for n in names if not fnmatch(n, pat)], ist aber effizienter implementiert.

Hinzugefügt in Version 3.14.

fnmatch.translate(pat)

Gibt das Shell-Stil-Muster pat zurück, das in einen regulären Ausdruck zur Verwendung mit re.match() konvertiert wurde. Das Muster wird als str erwartet.

Beispiel

>>> 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'>

Siehe auch

Modul glob

Unix-Shell-Stil-Pfadnamenserweiterung.