English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hier werden wir sehen, wie man mit Python die UNIX-Shell-Style-Musterübereinstimmungstechnik erhält. Es gibt einen NamenfnmatchModul, um die Arbeit zu erledigen. Dieses Modul wird verwendet, um Dateinamen mit Mustern zu vergleichen und dann basierend auf dem Matching-Ergebnis True oder False zurückzugeben.
Zunächst müssen wir es importierenfnmatchStandardbibliotheksmodul.
import fnmatch
In Unix-Terminals gibt es einige Wildcards, die Muster matchen können. Diese sind wie folgt-
'*'*' Stern wird verwendet, um alles zu matchen.
'?' Fragezeichen wird verwendet, um ein einzelnes Zeichen zu matchen.
[seq] Sequenz wird verwendet, um Zeichen in der Sequenz zu matchen
[!seq] wird verwendet, um Zeichen zu matchen, die nicht in der Sequenz vorhanden sind.
Wenn wir nach Sternen oder Fragezeichen als Zeichen suchen möchten, müssen wir sie so verwenden: [*] oder [?]
fnmatch()
MethodeDiesfnmatch()
Es gibt zwei Parameter, nämlich den Dateinamen und das Muster. Diese Funktion wird verwendet, um zu überprüfen, ob der Dateiname mit dem angegebenen Muster übereinstimmt. Wenn der Betriebssystem Groß- und Kleinschreibung unterscheidet, werden die Parameter vor der Übereinstimmung in Groß- oder Kleinschreibung standardisiert.
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files for filename in files: print('Datei: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))
Ausgaberesultat
$ python3 310.UNIX_filename.py Datei: test_file5.txt: True Datei: test_file2.png : True Datei: test_file1.txt: True Datei: another_file.txt : False Datei: TEST_FILE4.txt : False Datei: abc.txt : False Datei: test_file3.txt: True $
filter()
MethodeDiesfilter()
Die Methode hat auch zwei Parameter. Der erste ist der Name, der zweite ist das Muster. Dieses Muster findet die Dateinamen, die in der Liste aller Dateinamen passen.
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files match_file = fnmatch.filter(files, file_pattern) print('Alle Dateien:' + str(files)) print('\nGefundene Dateien:' + str(match_file))
Ausgaberesultat
$ python3 310.UNIX_filename.py Alle Dateien:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt'] Gefundene Dateien:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt'] $
translate()
MethodeDiestranslate()
Die Methode nimmt ein Parameter. Dies ist ein Muster. Wir können diese Funktion verwenden, um外壳样式模式 in ein anderes Muster umzuwandeln, um mit regulären Ausdrücken in Python zu matchen.
import fnmatch, re file_pattern = 'test_f*.txt' unix_regex = fnmatch.translate(file_pattern) regex_object = re.compile(unix_regex) print('Regulärer Ausdruck:' + str(unix_regex)) print('Match Object:' + str(regex_object.match('test_file_abcd123.txt')))
Ausgaberesultat
$ python3 310.UNIX_filename.py Regulärer Ausdruck:(?s:test_f.*\.txt)\Z Match Object:<_sre.SRE_Match object; span=(0, 21), match='test_file_abcd123.txt'> $