Maison >développement back-end >Tutoriel Python >Explication détaillée du module python difflib
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 :
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
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']
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
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
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
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()
Résultat d'exécution :
Résultat de la comparaison de fichiers HTML généré :
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!