Python fnmatch

Python fnmatch

Lorsque vous travaillez avec des fichiers et des systèmes de fichiers, il est courant de rechercher dans de nombreux fichiers pour découvrir un certain fichier. Trouver les fichiers nécessaires de nombreux fichiers prendra une éternité si elle est faite manuellement. En conséquence, les systèmes d'exploitation et les langages de programmation comprennent des installations pour localiser dynamiquement les fichiers nécessaires. Ces utilitaires ciblent généralement les noms de fichiers et utilisent la correspondance des modèles pour essayer de localiser les fichiers pertinents.

La bibliothèque FNMatch dans le langage de programmation Python peut être utilisée pour localiser des fichiers dans des systèmes d'exploitation basés sur UNIX comme MacOS et Linux. Cet article utilise le module fnmatch en python pour faire la correspondance de motifs.

Qu'est-ce que fnmatch?

Il s'agit d'un package python commun pour faire correspondre les jokers comme ceux utilisés dans les coquilles Unix. Si un seul nom de fichier correspond à un modèle, fnmatch () renvoie true; Sinon, il renvoie faux.

Fonctions fournies par le module fnmatch

Le module fnmatch contient les fonctions fnmatch (), fnmatchcase (), filter () et tradlate (). Des exemples de programmes qui démontrent chaque fonction en profondeur peuvent être trouvés ci-dessous.

Exemple 1:

Ceci est le premier de plusieurs exemples de notre article sur la méthode fnmatch (). Si le nom donné du fichier correspond à la chaîne de modèle, la méthode fnmatch () exécutée renvoie une valeur booléenne. Si le système d'exploitation est insensible à la casse, la comparaison aura lieu après que les deux paramètres ont été normalisés à tous les caractères de cas inférieur et supérieur.

Voici un programme; Tout d'abord, nous avons importé le module FNMatch et OS. Après cela, nous recherchons tous les fichiers qui commencent par «fnmatch» et nous nous terminons avec '.py '. Enfin, imprimez le résultat, comme vous pouvez le voir dans la dernière ligne de code.

importer fnmatch
Importer un système d'exploitation
patn = 'fnmatch_ *.py '
imprimer («le motif est», Patn)
imprimer()
file_name = os.listDir ('.')
pour le nom dans file_name:
Imprimer ('Nom du fichier:% -25S% s'% (nom, fnmatch.fnmatch (nom, patn)))

Ici, dans la sortie, vous pouvez voir que le modèle et les fichiers qui correspondent au modèle sont répertoriés.

Exemple 2:

Un autre exemple élabore la fonction fnmatch. Cette fonction nécessite le nom de fichier et un modèle de chaîne de caractères. Le nom du fichier est comparé au modèle, et la méthode renvoie vrai ou faux.

Dans l'exemple ci-dessous, nous avons importé les modules glob et fnmatch qui sont nécessaires pour que ce programme exécute. Après cela, nous avons compilé une liste de tous les fichiers présents dans le répertoire actuel qui correspondent au «*.Py ».

Importer glob, fnmatch
pour files_name dans (glob.glob ('*.* ')):
if (fnmatch.fnmatch (files_names, "*.py ")):
print (files_name)

Ci-dessous, vous pouvez découvrir que les fichiers qui correspondent au modèle sont récupérés avec succès et répertoriés.

Exemple 3:

Maintenant, nous allons discuter de la fonction fnmatchCase () de fnmatch. Si la chaîne de nom de fichier correspond à la chaîne de modèle définie, cette fonction effectue une comparaison (sensible à la casse dans ce scénario) et renvoie une valeur booléenne. La valeur est vraie ou fausse. Indépendamment du système de fichiers ou des paramètres du système d'exploitation, vous pouvez trouver le code du programme pour une comparaison sensible à la casse ici.

Après avoir importé le module FNMatch et OS, nous avons défini le modèle (indiqué comme patn dans le code) sur lequel notre recherche est basée. Ensuite, nous avons répertorié tous les fichiers et les valeurs booléennes si le fichier correspond au modèle.

importer fnmatch
Importer un système d'exploitation
patn = 'fnmatch_ *.Py '
Imprimer ('Modèle:', Patn)
imprimer()
file_name = os.listDir ('.')
pour le nom dans file_name:
(imprimer ('Nom du fichier:% -25S% s'% (nom, fnmatch.fnmatchcase (nom, patn)))))

Ci-dessous, vous pouvez trouver la sortie, et comme vous pouvez voir que tous les fichiers renvoient faux.

Exemple 4:

Dans un autre exemple de fnmatchCase mentionné ci-dessous, tous les fichiers commençant par la lettre «H» et l'extension ».Py 'sont d'abord rassemblés dans un objet de liste de fichiers. La méthode fnmatch () est utilisée pour produire uniquement des noms qui commencent par les lettres h.'

Importer glob, fnmatch
fichiers = glob.glob ("h *.* ")
des dossiers
['données.txt ',' démo.txt ',' History.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
pour le fichier dans les fichiers:
Si fnmatch.fnmatchCase (fichier, "h *.* ") == true:
imprimer le fichier)

Ci-dessous, l'historique des fichiers.py et history_internal.Py est affiché dans la capture d'écran car ils correspondent au motif défini.

Exemple 5:

Nous allons maintenant parler de la fonction de filtre du module FNMatch. Cette méthode renvoie le sous-ensemble de la liste des noms qui correspondent exactement au modèle fourni des noms donnés. Ici, vous pouvez facilement filtrer les fichiers non seulement un mais de nombreuses extensions de fichiers. Examiner le code ci-dessous.

Ici, nous avons d'abord importé les modules requis et défini le modèle. Après cela, énumérez tous les fichiers qui correspondent aux critères.

importer fnmatch
Importer un système d'exploitation
patn = 'fnmatch_ *.py '
Imprimer ('Modèle est:', Patn)
file_name = os.listDir ('.')
print ('Les fichiers sont mentionnés ici:', File_name)
print ('Matchs trouvé:', fnmatch.Filter (File_name, Patn))

Ici, vous pouvez observer que le motif s'affiche d'abord, puis les fichiers sont récupérés et affichés. Enfin, les correspondances sont affichées si elles sont trouvées. Dans notre cas, aucun match n'est trouvé.

Exemple 6:

Un autre programme élabore la fonction de filtre. Ici, seuls les fichiers dont les noms correspondent au paramètre de modèle sont renvoyés par cette fonction. De tous les fichiers du répertoire actuel, l'instruction suivante donne une liste de fichiers avec le '.Extension txt '.

importer fnmatch
Fichiers = ['Données.txt ',' démo.txt ',' History.Py ',' History_internal.py ',' new_file.txt ',' pdb_history.sqlite ',]
imprimer (fnmatch.filtre (fichiers, "*.SMS"))

Voici les noms des fichiers avec le '.Extension txt '.

Exemple 7:

La fonction tradlate () du module fnmatch est démontrée dans cet exemple. Cette fonction convertit un motif de style shell en une expression régulière qui peut être utilisée avec re.match () (re.Match () ne correspond qu'au début du texte, pas à chaque ligne). Nous avons importé les modules FNMatch et RE, comme vous pouvez le voir dans le code ci-dessous. Le motif a ensuite été transformé en une expression régulière en utilisant la méthode tradlate ().

importer fnmatch, re
reg_exp = fnmatch.traduire('*.SMS')
re_obj = re.compiler (reg_exp)
print (reg_exp)
imprimer (re_obj.match ('démo.SMS'))

Ici, vous pouvez voir la sortie du programme de code de méthode tradlate () ci-dessus.

Exemple 8:

Voici un autre exemple de la même fonction discutée ci-dessus. Après avoir importé les modules requis, nous avons exécuté la fonction de tradlate dans laquelle nous avons passé le modèle que nous avons défini dans la ligne de code ci-dessus. La valeur de retour de la fonction est ensuite transformée en une expression régulière en utilisant la fonction compile () du module RE. Après cela, il est utilisé pour correspondre au modèle donné.

Importer RE
importer fnmatch
Importer un globe
patn = "*.SMS"
reg_exp = fnmatch.Traduire (Patn)
reg_exp
'(?S:.* \\.txt) \\ z '
res = re.compiler (reg_exp)
pour file_name dans glob.glob ("*.* "):
Si re.correspond à (res, file_name):
print (file_name)

Voici le résultat lorsque nous avons exécuté le programme ci-dessus.

Conclusion:

La fonction fnmatch () peut correspondre entre une méthode de chaîne simple et une expression régulière complexe. C'est généralement un schéma raisonnable lorsque seul un simple tableau générateur est nécessaire pour traiter les données. Nous avons élaboré plusieurs exemples pour couvrir ce sujet en détail.