Comment utiliser le module diffib dans python

Comment utiliser le module diffib dans python
Cet article couvrira un guide sur l'utilisation du module «diffib» dans Python. Le module diffib peut être utilisé pour comparer deux objets Python de certains types et afficher les similitudes ou les différences entre elles. Tous les échantillons de code de cet article sont testés avec Python 3.9.5 sur Ubuntu 21.04.

À propos du module diffib

Le module diffib, comme son nom l'indique, peut être utilisé pour trouver des différences ou «diff» entre le contenu des fichiers ou d'autres objets python hashable. Il peut également être utilisé pour trouver un rapport qui montre l'étendue des similitudes entre deux objets. L'utilisation du module Diffblib et de ses fonctions peut être mieux comprise à travers des exemples. Certains d'entre eux sont énumérés ci-dessous.

À propos des objets python hashable

Dans Python, les types d'objets dont la valeur ne sont pas susceptibles de changer ou la plupart des types d'objets immuables sont appelés types de présentabilité. Les objets de type hashable ont une certaine valeur fixe attribuée par Python pendant la déclaration et ces valeurs ne changent pas au cours de leur vie. Tous les objets hashable de Python ont une méthode «__hash__». Jetez un œil à l'échantillon de code ci-dessous:

nombre = 6
imprimer (type (numéro))
imprimer (numéro.__hacher__())
word = "quelque chose"
imprimer (type (mot))
imprimer (mot.__hacher__())
dictionnaire = "a": 1, "b": 2
imprimer (type (dictionnaire))
imprimer (dictionnaire.__hacher__())

Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

L'exemple de code comprend trois types de python: un objet de type entier, un objet de type de chaîne et un objet de type dictionnaire. La sortie montre que lors de l'appel de la méthode «__hash__», l'objet de type entier et l'objet de type de chaîne affiche une certaine valeur tandis que l'objet de type dictionnaire lance une erreur car il n'a pas de méthode appelée «__hash__». Par conséquent, un type entier ou un type de chaîne est un objet hashable en Python alors qu'un type de dictionnaire n'est pas. Vous pouvez en savoir plus sur les objets hashable à partir d'ici.

Comparaison de deux objets Python hashable

Vous pouvez comparer deux types ou séquences hashable en utilisant la classe «Différe» disponible dans le module DiffFli. Jetez un œil à l'échantillon de code ci-dessous.

de la diffib importation diffère
line1 = "ABCD"
line2 = "cdef"
D = Différent ()
différence = liste (D.Comparez (line1, line2))
Imprimer (différence)

La première instruction importe la classe différente du module diffib. Ensuite, deux variables de type de chaîne sont définies avec certaines valeurs. Une nouvelle instance de la classe différente est ensuite créée comme «D». En utilisant cette instance, la méthode «comparer» est ensuite appelée pour trouver la différence entre les chaînes «line1» et «line2». Ces chaînes sont fournies comme arguments à la méthode de comparaison. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:


Les tirets ou les panneaux moins indiquent que "line2" n'a pas ces caractères. Les caractères sans signes ou blancs d'origine sont communs aux deux variables. Les caractères avec un signe plus sont disponibles dans la chaîne «line2» uniquement. Pour une meilleure lisibilité, vous pouvez utiliser la méthode du caractère Newline et «Join» pour afficher la sortie ligne par ligne:

de la diffib importation diffère
line1 = "ABCD"
line2 = "cdef"
D = Différent ()
différence = liste (D.Comparez (line1, line2))
différence = '\ n'.rejoindre (différence)
Imprimer (différence)

Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

Au lieu de la classe différente, vous pouvez également utiliser la classe «htmldiff» pour produire une sortie colorée au format HTML.

à partir de diffib import htmldiff
line1 = "ABCD"
line2 = "cdef"
d = htmldiff ()
différence = D.Make_file (line1, line2)
Imprimer (différence)

L'échantillon de code est le même que ci-dessus, sauf que l'instance de classe différente a été remplacée par une instance de la classe HTMLDIFF et au lieu de la méthode de comparaison, vous appelez maintenant la méthode «Make_file». Après avoir exécuté la commande ci-dessus, vous obtiendrez une sortie HTML dans le terminal. Vous pouvez exporter la sortie vers un fichier en utilisant le symbole ">" en bash ou vous pouvez utiliser l'échantillon de code ci-dessous pour exporter la sortie vers un "Diff.Fichier html »de Python lui-même.

à partir de diffib import htmldiff
line1 = "ABCD"
line2 = "cdef"
d = htmldiff ()
différence = D.Make_file (line1, line2)
avec ouvert ("Diff.html "," w ") comme f:
pour la ligne de différence.Splisslines ():
Imprimer (ligne, fichier = f)

La déclaration «avec ouverte» en mode «W» crée un nouveau «Diff.Fichier HTML »et enregistre le contenu entier de la variable« différence »au DIFF.fichier html. Lorsque vous ouvrez le diff.Fichier HTML Dans un navigateur, vous devriez obtenir une mise en page similaire à ceci:

Obtenir des différences entre le contenu de deux fichiers

Si vous souhaitez produire des données Diff à partir du contenu de deux fichiers en utilisant la différence.Méthode compare (), vous pouvez utiliser l'instruction «avec ouverte» et la méthode «Readline» pour lire le contenu des fichiers. L'exemple ci-dessous illustre cela lorsque le contenu de «Fichier1.txt "et" file2.txt "sont lus en utilisant des instructions" avec Open ". Les instructions «avec ouverte» sont utilisées pour lire les données en toute sécurité à partir de fichiers.

de la diffib importation diffère
avec Open ("File1.txt ") comme f:
file1_lines = f.LEADLINES ()
avec Open ("File2.txt ") comme f:
file2_lines = f.LEADLINES ()
D = Différent ()
différence = liste (D.comparer (file1_lines, file2_lines)))
différence = '\ n'.rejoindre (différence)
Imprimer (différence)

Le code est assez simple et presque le même que l'exemple indiqué ci-dessus. En supposant que «Fichier1.txt "contient" A "," B "," C "et" D "des caractères chacun sur une nouvelle ligne et" File2.txt "contient" C "," D "," E "et" F "les caractères chacun sur une nouvelle ligne, l'échantillon de code ci-dessus produira la sortie suivante:

La sortie est presque la même qu'avant, «-» le signe représente les lignes non présentes dans le deuxième fichier. Le signe «+» montre les lignes uniquement présentes dans le deuxième fichier. Les lignes sans signes ou les deux signes sont communs aux deux fichiers.

Rapport de similitude

Vous pouvez utiliser la classe «Sequencematcher» du module diffib pour trouver le rapport de similitude entre deux objets Python. La plage du rapport de similitude se situe entre 0 et 1 où la valeur de 1 indique une correspondance exacte ou une similitude maximale. Une valeur de 0 indique des objets totalement uniques. Jetez un œil à l'échantillon de code ci-dessous:

de DiffFlib Import Sequencematcher
line1 = "ABCD"
line2 = "cdef"
sm = Sequencematcher (a = line1, b = line2)
Imprimer (SM.rapport())

Une instance Sequencematcher a été créée avec des objets à comparer fournis comme «A» et «B» Arguments. La méthode «rapport» est alors appelée l'instance pour obtenir le rapport de similitude. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

Conclusion

Le module diffib dans Python peut être utilisé de diverses façons pour comparer les données de différents objets hashable ou contenu lus à partir de fichiers. Sa méthode de rapport est également utile si vous voulez simplement obtenir un pourcentage de similitude entre deux objets.