Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung des Python-Difflib-Moduls

Detaillierte Erläuterung des Python-Difflib-Moduls

巴扎黑
巴扎黑Original
2017-09-15 10:45:356095Durchsuche

In diesem Artikel werden hauptsächlich Beispiele des Python-Difflib-Moduls im Detail vorgestellt. Interessierte Freunde können sich auf die vom

Difflib-Modul bereitgestellten Klassen und Methoden beziehen Vergleichen Sie Dateien und generieren Sie einen differenziellen Ergebnistext oder eine differenzielle Vergleichsseite im HTML-Format. Wenn Sie die Unterschiede in Verzeichnissen vergleichen müssen, können Sie das Modul filecmp verwenden.

Klasse difflib.SequenceMatcher

Diese Klasse stellt Methoden zum Vergleichen von Sequenzpaaren beliebiger hashbarer Typen bereit. Diese Methode findet die größte aufeinanderfolgende übereinstimmende Sequenz, die keine „Müll“-Elemente enthält.

Wenn man die Komplexität des Algorithmus vergleicht, hat er aufgrund des ursprünglichen Gestalt-Matching-Algorithmus im schlimmsten Fall n quadratische Operationen und im besten Fall eine lineare Effizienz.

Es verfügt über eine automatische Garbage-Heuristik, die Zeichen, die mehr als 1 % des Fragments oder 200 Mal wiederholt werden, als Garbage behandeln kann. Diese Funktion kann deaktiviert werden, indem Autojunk auf „false“ gesetzt wird.

Klasse difflib.Differ

Diese Klasse vergleicht die Unterschiede zwischen Textzeilen und erzeugt Differenzergebnisse oder inkrementelle Ergebnisse, die für die menschliche Lesbarkeit geeignet sind Die Teildarstellung ist wie folgt:

Detaillierte Erläuterung des Python-Difflib-Moduls

class difflib.HtmlDiff

Diese Klasse kann verwendet werden, um HTML-Tabellen zu erstellen (oder zu enthalten). Tabellen-HTML-Datei), entsprechende beidseitige Darstellung oder zeilenweise Darstellung zum Vergleich der Differenzergebnisse.

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

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

Beide der beiden oben genannten Methoden können verwendet werden, um eine HTML-Datei zu generieren, die eine Tabelle mit den Vergleichsergebnissen enthält, und ein Teil des Inhalts wird hervorgehoben.

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

Generator
, der a und b (eine Liste von Zeichenfolgen) vergleicht und eine Zeile mit Differenztext zurückgibt. Beispiel:


>>> 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(. Wort, Möglichkeiten[, n][, Cutoff])

Gibt die Liste der maximal passenden Ergebnisse zurück

Beispiel:


>>> 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])

Vergleichen Sie a und b (String-Liste) und geben Sie einen Unterschied im Differ-Stil zurück Ergebnis
Beispiel:


>>> 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)

gibt ein Verhältnis von zwei Ergebnissen zurück für Sequenz

Beispiel


>>> 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])

Vergleichen Sie a und b (String-Liste) und geben Sie ein Differenzergebnis im einheitlichen Diff-Format zurück.

Beispiel:


>>> 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

Praktisches Anwendungsbeispiel

Vergleichen Sie zwei Dateien und generieren Sie dann eine HTML-Datei mit den Differenzergebnissen


#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()

Laufendes Ergebnis:

Detaillierte Erläuterung des Python-Difflib-Moduls

Generiertes HTML-Dateivergleichsergebnis:

Detaillierte Erläuterung des Python-Difflib-Moduls

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Python-Difflib-Moduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn