So verwenden Sie das DiFflib -Modul in Python

So verwenden Sie das DiFflib -Modul in Python
Dieser Artikel behandelt eine Anleitung zur Verwendung des „DiFflib“ -Moduls in Python. Das DiFflib -Modul kann verwendet werden, um zwei Python -Objekte bestimmter Typen zu vergleichen und Ähnlichkeiten oder Unterschiede zwischen ihnen anzusehen. Alle Codeproben in diesem Artikel werden mit Python 3 getestet.9.5 auf Ubuntu 21.04.

Über das DiFflib -Modul

Das DIFFLIB -Modul kann, wie der Name schon sagt. Es kann auch verwendet werden, um ein Verhältnis zu finden, das das Ausmaß der Ähnlichkeiten zwischen zwei Objekten zeigt. Die Verwendung des DiFflib -Moduls und seiner Funktionen kann am besten anhand von Beispielen verstanden werden. Einige von ihnen sind unten aufgeführt.

Über Hashable Python -Objekte

In Python werden Objekttypen, deren Wert wahrscheinlich nicht ändert, oder die meisten unveränderlichen Objekttypen werden als Hashable -Typen bezeichnet. Hashable -Typ -Objekte haben einen bestimmten festen Wert, der von Python während der Deklaration zugewiesen wurde, und diese Werte ändern sich während ihrer Lebensdauer nicht. Alle Hashable -Objekte in Python haben eine "__hash__" -Methode. Schauen Sie sich das Code -Beispiel unten an:

Zahl = 6
Druck (Typ (Nummer))
Druck (Nummer.__hash __ ())
word = "etwas"
drucken (type (word))
drucken (Wort.__hash __ ())
Dictionary = "A": 1, "B": 2
Druck (Typ (Wörterbuch))
Druck (Wörterbuch.__hash __ ())

Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

Das Code -Beispiel enthält drei Python -Typen: ein Ganzzahltypobjekt, ein Objekttyp -Objekt und ein Wörterbuch -Objekt. Die Ausgabe zeigt, dass beim Aufrufen der Methode „__hash__“ das Ganzzahltyp -Objekt und das Objekttyp des String -Typs einen bestimmten Wert anzeigen, während das Objekt des Wörterbuchstyps einen Fehler auswirkt, da es keine Methode mit dem Namen "__hash__" hat. Daher ist ein Ganzzahltyp oder ein String -Typ ein Hashable -Objekt in Python, während ein Wörterbuchtyp nicht ist. Von hier aus können Sie mehr über Hashable -Objekte erfahren.

Vergleich von zwei Hashable -Python -Objekten

Sie können zwei Hashable -Typen oder Sequenzen mit der im DIFFLIB -Modul verfügbaren Klasse "Differenz" vergleichen. Schauen Sie sich das Code -Beispiel unten an.

von DiFflib Import unterscheiden sich
Zeile1 = "ABCD"
Zeile2 = "cDEF"
d = differenz ()
Differenz = Liste (d.vergleiche (Zeile1, Zeile2))
Druck (Differenz)

Die erste Aussage importiert die Unterrichtsklasse aus dem DIFFLIB -Modul. Als nächstes werden zwei Variablen vom Typ String -Typ mit einigen Werten definiert. Eine neue Instanz der unterschiedlichen Klasse wird dann als "D" erstellt. Mit dieser Instanz wird die Methode "Vergleichen" aufgerufen, um den Unterschied zwischen "Line1" und "Line2" -Saiten zu finden. Diese Saiten werden als Argumente für die Vergleichsmethode geliefert. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:


Die Striche oder Minuszeichen zeigen, dass „Zeile2“ diese Zeichen nicht hat. Zeichen ohne Anzeichen oder führende Weißespace sind bei beiden Variablen gemeinsam. Zeichen mit Plus -Zeichen sind nur in der Zeichenfolge „Zeile2“ erhältlich. Für eine bessere Lesbarkeit können Sie die Methode "Newline" und "Join" verwenden, um die Zeile nach Leitungsausgabe anzuzeigen:

von DiFflib Import unterscheiden sich
Zeile1 = "ABCD"
Zeile2 = "cDEF"
d = differenz ()
Differenz = Liste (d.vergleiche (Zeile1, Zeile2))
Differenz = '\ n'.beitreten (Differenz)
Druck (Differenz)

Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

Anstelle der Unterrichtsklasse können Sie auch die Klasse „HTMLDIFF“ verwenden, um farbige Ausgabe im HTML -Format zu erzeugen.

von DiFflib import htmldiff
Zeile1 = "ABCD"
Zeile2 = "cDEF"
d = htmldiff ()
Differenz = d.make_file (Zeile1, Zeile2)
Druck (Differenz)

Die Code -Probe ist die gleiche wie oben, mit der Ausnahme, dass die Unterrichtsinstanz durch eine Instanz der HTMLDIFF -Klasse ersetzt wurde, und anstelle der Vergleichsmethode nennen Sie nun die Methode "make_file". Nach dem Ausführen des obigen Befehls erhalten Sie eine HTML -Ausgabe im Terminal. Sie können die Ausgabe mit dem Symbol ">" in Bash in eine Datei exportieren, oder Sie können das folgende Code -Beispiel verwenden, um die Ausgabe in einen „Diff) zu exportieren.HTML -Datei von Python selbst.

von DiFflib import htmldiff
Zeile1 = "ABCD"
Zeile2 = "cDEF"
d = htmldiff ()
Differenz = d.make_file (Zeile1, Zeile2)
mit offen ("diff.html "," w ") als f:
Für die Linie im Unterschied.Splitlines ():
print (Zeile, Datei = f)

Die Anweisung "mit offener" im "W" -Modus erzeugt einen neuen "Diff.HTML -Datei und speichert den gesamten Inhalt der Variablen „Differenz“ für den Diff.HTML -Datei. Wenn Sie den Diff öffnen.HTML -Datei In einem Browser sollten Sie ein ähnliches Layout erhalten:

Unterschiede zwischen Inhalt von zwei Dateien erhalten

Wenn Sie mithilfe der Unterschiede Differenzdaten aus dem Inhalt von zwei Dateien erstellen möchten.Compare () -Methode können Sie die Methode „mit offener“ und „Readline“ verwenden, um den Inhalt von Dateien zu lesen. Das folgende Beispiel zeigt dies, wobei der Inhalt von „Datei1.txt ”und„ Datei2.txt ”werden mit" mit offenen "Anweisungen gelesen. Die Anweisungen „mit offenen“ Anweisungen werden verwendet, um Daten aus Dateien sicher zu lesen.

von DiFflib Import unterscheiden sich
mit open ("Datei1.txt ") als f:
Datei1_lines = f.Readlines ()
mit open ("Datei2.txt ") als f:
Datei2_lines = f.Readlines ()
d = differenz ()
Differenz = Liste (d.Compare (Datei1_lines, Datei2_lines)))
Differenz = '\ n'.beitreten (Differenz)
Druck (Differenz)

Der Code ist ziemlich einfach und fast das gleiche wie das oben gezeigte Beispiel. Angenommen, das „Datei1.TXT ”enthält" A "," B "," C "und" D "-Pritte jeweils in einer neuen Zeile und" Datei2 ".TXT ”enthält" C "," D "," E "und" F "-Scharns in jeweils einer neuen Zeile. Das obige Code -Beispiel erzeugt die folgende Ausgabe:

Die Ausgabe ist fast übereinst. Das Zeichen „+“ zeigt Zeilen, die nur in der zweiten Datei vorhanden sind. Zeilen ohne Anzeichen oder beide Anzeichen sind bei beiden Dateien gemeinsam.

Finden von Ähnlichkeitsverhältnissen

Sie können die Klasse "SequencErenatcher" aus dem DIFFLIB -Modul verwenden, um das Ähnlichkeitsverhältnis zwischen zwei Python -Objekten zu finden. Der Bereich des Ähnlichkeitsverhältnisses liegt zwischen 0 und 1, wenn ein Wert von 1 eine genaue Übereinstimmung oder maximale Ähnlichkeit angibt. Ein Wert von 0 zeigt völlig eindeutige Objekte an. Schauen Sie sich das Code -Beispiel unten an:

von DiFflib importieren Sequencematcher
Zeile1 = "ABCD"
Zeile2 = "cDEF"
sm = sequencematcher (a = Zeile1, b = Zeile2)
drucken (sm.Verhältnis())

Eine Sequencematcher -Instanz wurde mit Objekten erstellt, die als "A" und "B" Argumente geliefert werden sollen. Die „Verhältnis“ -Methode wird dann auf die Instanz aufgerufen, um das Ähnlichkeitsverhältnis zu erhalten. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

Abschluss

Das DIFFLIB -Modul in Python kann auf verschiedene Weise verwendet werden, um Daten aus verschiedenen Hash -Objekten oder Inhalten aus Dateien zu vergleichen. Die Verhältnismethode ist auch nützlich, wenn Sie nur einen Ähnlichkeitsprozentsatz zwischen zwei Objekten erhalten möchten.