Maison > développement back-end > Tutoriel Python > Explication détaillée du module python difflib

Explication détaillée du module python difflib

巴扎黑
Libérer: 2017-09-15 10:45:35
original
6098 Les gens l'ont consulté

Cet article présente principalement en détail des exemples du module python difflib, qui a une certaine valeur de référence. Les amis intéressés peuvent se référer aux classes et aux méthodes fournies par le

module difflib pour la comparaison différentielle, il peut. comparez les fichiers et générez un texte de résultat différentiel ou une page de comparaison différentielle au format HTML. Si vous avez besoin de comparer les différences entre les répertoires, vous pouvez utiliser le module filecmp.

classe difflib.SequenceMatcher

Cette classe fournit des méthodes pour comparer des paires de séquences de types hachables arbitraires. Cette méthode trouvera la plus grande séquence correspondante consécutive qui ne contient pas d'éléments « inutiles ».

En comparant la complexité de l'algorithme, il comporte n opérations carrées dans le pire des cas en raison de l'algorithme de correspondance Gestalt original, et a une efficacité linéaire dans le meilleur des cas.

Il dispose d'une heuristique automatique des déchets qui peut traiter les caractères répétés à plus de 1 % du fragment ou répétés 200 fois comme des déchets. Cette fonctionnalité peut être désactivée en définissant autojunk sur false.

classe difflib.Differ

Cette classe compare les différences entre les lignes de texte et produit des résultats de différence ou des résultats incrémentiels adaptés à la lecture humaine. La représentation partielle est la suivante :

Explication détaillée du module python difflib

class difflib.HtmlDiff

Cette classe peut être utilisée pour créer des tableaux HTML (ou contenir fichiers html de tableaux), affichage correspondant des deux côtés ou affichage ligne par ligne pour comparer les résultats de différence.

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

make_table(fromlines, tolines [, fromdesc][, todesc][, context ][, numlines])

Les deux méthodes ci-dessus peuvent être utilisées pour générer un fichier html contenant un tableau contenant les résultats de la comparaison, et une partie du contenu sera mise en évidence.

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

Générateur
qui compare a et b (une liste de chaînes) et renvoie une ligne de texte de différence Exemple :


>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...   sys.stdout.write(line) 
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
 guido
--- 1,4 ----
! python
! eggy
! hamster
 guido
Copier après la connexion

difflib.get_close_matches(. word , possibilités[, n][, cutoff])

Renvoie la liste des résultats correspondants maximum

Exemple :


>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
Copier après la connexion

difflib.ndiff(a, b[, linejunk][, charjunk])

Comparez a et b (liste de chaînes) et renvoyez une différence de style Differ Résultat
Exemple :


>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> print ''.join(diff),
- one
? ^
+ ore
? ^
- two
- three
? -
+ tree
+ emu
Copier après la connexion

difflib.restore(sequence, which)

renvoie un rapport de deux Résultat pour la séquence

Exemple


>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print ''.join(restore(diff, 1)),
one
two
three
>>> print ''.join(restore(diff, 2)),
ore
tree
emu
Copier après la connexion

difflib.unified_diff(a, b[, fromfile][, tofile ][, fromfiledate][, tofiledate][, n][, lineterm])

Comparez a et b (liste de chaînes) et renvoyez un résultat de différence au format diff unifié.

Exemple :


>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...  sys.stdout.write(line) 
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
Copier après la connexion

Exemple d'application pratique

Comparez deux fichiers, puis générez un fichier HTML montrant les résultats de différence


#coding:utf-8
'''
file:difflibeg.py
date:2017/9/9 10:33
author:lockey
email:lockey@123.com
desc:diffle module learning and practising 
'''
import difflib
hd = difflib.HtmlDiff()
loads = ''
with open('G:/python/note/day09/0907code/hostinfo/cpu.py','r') as load:
 loads = load.readlines()
 load.close()

mems = ''
with open('G:/python/note/day09/0907code/hostinfo/mem.py', 'r') as mem:
 mems = mem.readlines()
 mem.close()

with open('htmlout.html','a+') as fo:
 fo.write(hd.make_file(loads,mems))
 fo.close()
Copier après la connexion

Résultat d'exécution :

Explication détaillée du module python difflib

Résultat de la comparaison de fichiers HTML généré :

Explication détaillée du module python difflib

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal