English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Unix-Dateinamenmusterverwendung in Python

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 [?]

Diesfnmatch()Methode

Diesfnmatch()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.

Beispielcode

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
$

Diesfilter()Methode

Diesfilter()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.

Beispielcode

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

Diestranslate()Methode

Diestranslate()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.

Beispielcode

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