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

Explication détaillée du module python difflib

巴扎黑
巴扎黑original
2017-09-15 10:45:356065parcourir

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

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 :

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!

Déclaration:
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