Python fnmatch

Python fnmatch

Bei der Arbeit mit Dateien und Dateisystemen ist es üblich, viele Dateien zu durchsuchen, um eine bestimmte Datei zu ermitteln. Das Finden der erforderlichen Dateien aus vielen Dateien erfordert eine Ewigkeit, wenn man manuell ausgeführt wird. Infolgedessen enthalten Betriebssysteme und Programmiersprachen Einrichtungen zum dynamischen Auffinden der erforderlichen Dateien. Diese Dienstprogramme zielen normalerweise auf Dateinamen ab und verwenden das Muster -Matching, um zu versuchen, die relevanten Dateien zu lokalisieren.

Die FNMatch-Bibliothek in der Python-Programmiersprache kann verwendet werden, um Dateien in UNIX-basierten Betriebssystemen wie MacOS und Linux zu finden. Dieser Artikel verwendet das FNMatch -Modul in Python, um Musteranpassungen durchzuführen.

Was ist fnmatch?

Es ist ein übliches Python -Paket für passende Platzhalter wie die in Unix -Shells verwendeten. Wenn ein einzelner Dateiname mit einem Muster übereinstimmt, gibt FNMatch () true zurück. Ansonsten gibt es falsche zurück.

Funktionen vom FNMatch -Modul

Das FNMatch -Modul enthält die Funktionen fnmatch (), fnmatchCase (), filter () und translate (). Beispielprogramme, die jede Funktion der Tiefe demonstrieren.

Beispiel 1:

Dies ist der erste von mehreren Beispielen in unserem Artikel über die Fnmatch () -Methode. Wenn der angegebene Name der Datei mit der Musterzeichenfolge übereinstimmt, gibt die ausgeführte Methode fnmatch () einen booleschen Wert zurück. Wenn das Betriebssystem von Fall unempfindlich ist, erfolgt der Vergleich, nachdem beide Parameter auf alle unter den unteren Case- und oberen Case-Zeichen normalisierten Parameter normalisiert wurden.

Hier ist ein Programm; Zuerst haben wir die FNMatch und das Betriebssystemmodul importiert. Danach suchen wir alle Dateien, die mit 'Fnmatch' beginnen und mit 'enden mit'.py '. Drucken Sie schließlich das Ergebnis, wie Sie in der letzten Codezeile sehen können.

fnmatch importieren
OS importieren
patrn = 'fnmatch_*.py '
print ('Das Muster ist', Patrn)
drucken()
Datei_name = os.ListDir ('.'))
Für den Namen in Datei_Name:
Print ('Name der Datei: %-25s %s' %(Name, fnmatch.fnmatch (Name, Patrn)))

Hier in der Ausgabe sehen Sie, dass das Muster und die Dateien, die mit dem Muster übereinstimmen, aufgeführt sind.

Beispiel 2:

Ein weiteres Beispiel erläutert die FNMatch -Funktion. Diese Funktion erfordert den Dateinamen und ein Zeichenzeichenmuster. Der Name der Datei wird mit dem Muster verglichen, und die Methode gibt wahr oder falsch zurück.

Im folgenden Beispiel haben wir die Glob- und FNMatch -Module importiert, die für dieses Programm erforderlich sind, um auszuführen. Danach haben wir eine Liste aller Dateien zusammengestellt, die im aktuellen Verzeichnis vorhanden sind, das zum „** passt.py ”Muster.

Import Glob, FNMatch
Für Dateien_names in (GLIB.Glob ('*.*')):
if (fnmatch.fnmatch (files_names, "*.py ")):
print (files_names)

Im Folgenden finden Sie heraus, dass die Dateien, die dem Muster übereinstimmen, erfolgreich abgerufen und aufgeführt werden.

Beispiel 3:

Jetzt werden wir die Funktion fnmatchCase () von fnmatch diskutieren. Wenn die Dateiname-Zeichenfolge mit der definierten Musterzeichenfolge übereinstimmt, führt diese Funktion einen Vergleich durch (in diesem Szenario) und gibt einen booleschen Wert zurück. Der Wert ist entweder wahr oder falsch. Unabhängig vom Dateisystem oder Betriebssystemeinstellungen finden Sie hier Programmcode für einen Fall-sensitiven Vergleich hier.

Nach dem Importieren des FNMatch- und OS -Moduls haben wir das Muster (angegeben als Patrn im Code angegeben) definiert, auf dem unsere Suche basiert. Dann haben wir alle Dateien und die booleschen Werte aufgeführt, wenn die Datei mit dem Muster übereinstimmt.

fnmatch importieren
OS importieren
patrn = 'fnmatch_*.Py '
print ('Muster:', Patrn)
drucken()
Datei_name = os.ListDir ('.'))
Für den Namen in Datei_Name:
(Druck ('Name der Datei: %-25s %s' %(Name, fnmatch.fnmatchCase (Name, Patrn)))))

Im Folgenden finden Sie die Ausgabe und wie Sie sehen können, dass alle Dateien false zurückgeben.

Beispiel 4:

In einem anderen Beispiel der unten erwähnten FNMatchCase beginnen alle Dateien mit dem Buchstaben 'H' und der Erweiterung '.Py 'werden zuerst in einem Dateienlistenobjekt gesammelt. Die Fnmatch () -Methode wird verwendet, um nur Namen auszugeben, die mit den Buchstaben 'h beginnen.''

Import Glob, FNMatch
Dateien = Glob.Glob ("H*.*")
Dateien
['Daten.txt ',' Demo.txt ',' Geschichte.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.Sqlite ',]
Für Dateien in Dateien:
Wenn fnmatch.fnmatchCase (Datei "H*.*") == true:
Druckdatei)

Im Folgenden der Dateienverlauf.py und history_internal.PY werden im Screenshot angezeigt, wenn sie dem definierten Muster übereinstimmen.

Beispiel 5:

Jetzt werden wir über die Filterfunktion des FNMatch -Moduls sprechen. Diese Methode gibt die Teilmenge der Liste der Namen zurück, die genau mit dem angegebenen Muster aus den angegebenen Namen übereinstimmen. Hier können Sie Dateien einfach nicht nur nach einer, sondern auch vielen Dateierweiterungen filtern. Untersuchen Sie den folgenden Code.

Hier haben wir zuerst die erforderlichen Module importiert und das Muster definiert. Listen Sie danach alle Dateien auf, die den Kriterien entsprechen.

fnmatch importieren
OS importieren
patrn = 'fnmatch_*.py '
print ('Muster ist:', Patrn)
Datei_name = os.ListDir ('.'))
print ('Dateien werden hier erwähnt:', Datei_Name)
print ('Matches gefunden:', fnmatch.filter (Datei_Name, Patrn))

Hier können Sie feststellen, dass das Muster zuerst angezeigt wird und die Dateien abgerufen und angezeigt werden. Zuletzt werden die Übereinstimmungen angezeigt, wenn gefunden. In unserem Fall wird keine Übereinstimmung gefunden.

Beispiel 6:

Ein anderes Programm erläutert die Filterfunktion. Hier werden nur die Dateien, deren Namen mit dem Musterparameter übereinstimmen, von dieser Funktion zurückgegeben. Aus allen Dateien im aktuellen Verzeichnis enthält die folgende Anweisung eine Liste von Dateien mit der ''.TXT 'Erweiterung.

fnmatch importieren
Dateien = ['Daten.txt ',' Demo.txt ',' Geschichte.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.Sqlite ',]
drucken (fnmatch.Filter (Dateien ",*.txt"))

Hier sind die Namen der Dateien mit dem '.TXT 'Erweiterung.

Beispiel 7:

Die Funktion translate () des FNMatch -Moduls wird in diesem Beispiel demonstriert. Diese Funktion wandelt ein Muster im Shell-Stil in einen regulären Ausdruck um, der mit RE verwendet werden kann.Match () (Re.Match () übereinstimmt nur zu Beginn des Textes, nicht in jeder Zeile). Wir haben die FNMatch- und RE -Module importiert, wie Sie im folgenden Code sehen können. Das Muster wurde dann unter Verwendung der Translate () -Methode in einen regulären Ausdruck transformiert.

fnmatch importieren, re
reg_exp = fnmatch.übersetzen('*.txt')
re_obj = re.kompilieren (reg_exp)
print (reg_exp)
print (re_obj.Match ('Demo.txt'))

Hier sehen Sie die Ausgabe des oben ausgeführten Translate () -Methodencodeprogramms.

Beispiel 8:

Hier ist ein weiteres Beispiel für dieselbe Funktion, die oben diskutiert wird. Nach dem Import der erforderlichen Module haben wir die Übersetzungsfunktion ausgeführt, in der wir das Muster übergeben haben, das wir in der obigen Codezeile definiert haben. Der Rückgabewert der Funktion wird dann unter Verwendung der Funktion des Re -Moduls Compile () in einen regulären Ausdruck umgewandelt. Danach wird es verwendet, um dem angegebenen Muster zu entsprechen.

Import Re
fnmatch importieren
import Glob
patrn = "*.txt"
reg_exp = fnmatch.übersetzen (Patrn)
reg_exp
'(?S:.*\\.txt) \\ z '
res = re.kompilieren (reg_exp)
für File_Name in Glob.Glob ("*.*"):
Wenn re.Match (Res, File_Name):
print (Datei_Name)

Hier ist das Ergebnis, wenn wir das obige Programm ausgeführt haben.

Abschluss:

Die Funktion fnmatch () kann zwischen einer einfachen String -Methode und einem komplexen regulären Ausdruck übereinstimmen. Es ist in der Regel ein vernünftiges Schema, wenn nur eine einfache Platzkarte erforderlich ist, um Daten zu verarbeiten. Wir haben mehrere Beispiele ausgearbeitet, um dieses Thema ausführlich zu behandeln.