glob — Unix-Stil-Pfadnamenserweiterung

Quellcode: Lib/glob.py


Das Modul glob findet alle Pfadnamen, die einem angegebenen Muster entsprechen, gemäß den Regeln der Unix-Shell, obwohl die Ergebnisse in beliebiger Reihenfolge zurückgegeben werden. Es findet keine Tilde-Erweiterung statt, aber *, ? und Zeichenbereiche, die mit [] ausgedrückt werden, werden korrekt abgeglichen. Dies geschieht durch die gemeinsame Verwendung der Funktionen os.scandir() und fnmatch.fnmatch() und nicht durch das tatsächliche Aufrufen einer Subshell.

Beachten Sie, dass Dateien, die mit einem Punkt (.) beginnen, nur mit Mustern übereinstimmen können, die ebenfalls mit einem Punkt beginnen, im Gegensatz zu fnmatch.fnmatch() oder pathlib.Path.glob(). (Für Tilde- und Shell-Variablen-Erweiterung verwenden Sie os.path.expanduser() und os.path.expandvars().)

Für einen literalen Abgleich umschließen Sie die Metazeichen in Klammern. Zum Beispiel passt '[?]' auf das Zeichen '?'.

Das Modul glob definiert die folgenden Funktionen

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Gibt eine möglicherweise leere Liste von Pfadnamen zurück, die mit pathname übereinstimmen, welches ein String sein muss, der eine Pfadspezifikation enthält. pathname kann absolut sein (wie /usr/src/Python-1.5/Makefile) oder relativ (wie ../../Tools/*/*.gif) und kann Shell-ähnliche Wildcards enthalten. Fehlerhafte Symlinks sind in den Ergebnissen enthalten (wie in der Shell). Ob die Ergebnisse sortiert sind, hängt vom Dateisystem ab. Wenn eine Datei, die die Bedingungen erfüllt, während des Aufrufs dieser Funktion entfernt oder hinzugefügt wird, ist es nicht spezifiziert, ob ein Pfadname für diese Datei enthalten sein wird.

Wenn root_dir nicht None ist, sollte es ein pfadähnliches Objekt sein, das das Stammverzeichnis für die Suche angibt. Es hat denselben Effekt auf glob() wie das Ändern des aktuellen Verzeichnisses vor dem Aufruf. Wenn pathname relativ ist, enthält das Ergebnis Pfade relativ zu root_dir.

Diese Funktion kann Pfade relativ zu Verzeichnissdeskriptoren mit dem Parameter dir_fd unterstützen.

Wenn recursive wahr ist, passt das Muster „**“ auf beliebige Dateien und null oder mehr Verzeichnisse, Unterverzeichnisse und symbolische Links zu Verzeichnissen. Wenn dem Muster ein os.sep oder os.altsep folgt, stimmen Dateien nicht überein.

Wenn include_hidden wahr ist, passt das Muster „**“ auf versteckte Verzeichnisse.

Löst ein Audit-Ereignis glob.glob mit den Argumenten pathname, recursive aus.

Löst ein Audit-Ereignis glob.glob/2 mit den Argumenten pathname, recursive, root_dir, dir_fd aus.

Hinweis

Die Verwendung des Musters „**“ in großen Verzeichnisbäumen kann übermäßig viel Zeit in Anspruch nehmen.

Hinweis

Diese Funktion kann doppelte Pfadnamen zurückgeben, wenn pathname mehrere „**“-Muster enthält und recursive wahr ist.

Geändert in Version 3.5: Unterstützung für rekursive Globs mit „**“.

Geändert in Version 3.10: Hinzugefügt wurden die Parameter root_dir und dir_fd.

Geändert in Version 3.11: Hinzugefügt wurde der Parameter include_hidden.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Gibt einen Iterator zurück, der dieselben Werte wie glob() liefert, ohne sie alle gleichzeitig zu speichern.

Löst ein Audit-Ereignis glob.glob mit den Argumenten pathname, recursive aus.

Löst ein Audit-Ereignis glob.glob/2 mit den Argumenten pathname, recursive, root_dir, dir_fd aus.

Hinweis

Diese Funktion kann doppelte Pfadnamen zurückgeben, wenn pathname mehrere „**“-Muster enthält und recursive wahr ist.

Geändert in Version 3.5: Unterstützung für rekursive Globs mit „**“.

Geändert in Version 3.10: Hinzugefügt wurden die Parameter root_dir und dir_fd.

Geändert in Version 3.11: Hinzugefügt wurde der Parameter include_hidden.

glob.escape(pathname)

Maskiert alle Sonderzeichen ('?', '*' und '['). Dies ist nützlich, wenn Sie eine beliebige literale Zeichenkette abgleichen möchten, die Sonderzeichen enthalten kann. Sonderzeichen in Laufwerks-/UNC-Freigaben werden nicht maskiert, z.B. unter Windows gibt escape('//?/c:/Quo vadis?.txt') '//?/c:/Quo vadis[?].txt' zurück.

Hinzugefügt in Version 3.4.

glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)

Konvertiert die gegebene Pfadspezifikation in einen regulären Ausdruck zur Verwendung mit re.match(). Die Pfadspezifikation kann Shell-ähnliche Wildcards enthalten.

Zum Beispiel

>>> import glob, re
>>>
>>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True)
>>> regex
'(?s:(?:.+/)?[^/]*\\.txt)\\z'
>>> reobj = re.compile(regex)
>>> reobj.match('foo/bar/baz.txt')
<re.Match object; span=(0, 15), match='foo/bar/baz.txt'>

Pfadtrennzeichen und Segmente sind für diese Funktion bedeutsam, im Gegensatz zu fnmatch.translate(). Standardmäßig stimmen Wildcards nicht mit Pfadtrennzeichen überein, und Mustersegmente * stimmen genau mit einem Pfadsegment überein.

Wenn recursive wahr ist, passt das Mustersegment „**“ auf beliebig viele Pfadsegmente.

Wenn include_hidden wahr ist, können Wildcards auf Pfadsegmente übereinstimmen, die mit einem Punkt (.) beginnen.

Eine Sequenz von Pfadtrennzeichen kann dem Argument seps übergeben werden. Wenn es nicht angegeben ist, werden os.sep und os.altsep (falls verfügbar) verwendet.

Siehe auch

pathlib.PurePath.full_match() und pathlib.Path.glob() Methoden, die diese Funktion aufrufen, um Musterabgleich und Globbing zu implementieren.

Hinzugefügt in Version 3.13.

Beispiele

Betrachten Sie ein Verzeichnis, das die folgenden Dateien enthält: 1.gif, 2.txt, card.gif und ein Unterverzeichnis sub, das nur die Datei 3.txt enthält. glob() ergibt die folgenden Ergebnisse. Beachten Sie, wie führende Komponenten des Pfades erhalten bleiben.

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
>>> glob.glob('**/*.txt', recursive=True)
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']

Wenn das Verzeichnis Dateien enthält, die mit . beginnen, werden diese standardmäßig nicht abgeglichen. Betrachten Sie zum Beispiel ein Verzeichnis, das card.gif und .card.gif enthält.

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']

Siehe auch

Das Modul fnmatch bietet Dateinamens- (nicht Pfad-) Erweiterung im Unix-Shell-Stil.

Siehe auch

Das Modul pathlib bietet High-Level-Pfadobjekte.