Erkennung und drucken Sie die Differenz zwischen zwei text-Dateien mit python 3.2
habe ich versucht ein Programm zu schreiben, in python zu Lesen, zwei text-Dateien und drucken Sie die Unterschiede in Ihren Texten.die beiden Dateien sind ähnlich anders als Zeile Nummerierung, die anders sind aufgrund einiger Kommentare, die eingegeben wurden.Ich habe versucht mit difflib Modul, aber es ist mir Fehler.
import difflib
from difflib import *
temp3=[]
temp4=[]
with open ("seqdetect",'r') as f:
with open ("seqdetect_2",'r') as g:
for item in f:
temp1 =item.split()
temp3.append(temp1)
for items in g:
temp2 =items.split()
temp4.append(temp2)
d = difflib.Differ()
diff = d.compare(temp3, temp4)
print ('\n'.join(diff))
Könntest du bitte eine alternative vorschlagen.
Grüße,
Mayank
with open ("seqdetect") as f, open ("seqdetect_2") as g:
funktioniert genauso gut (nur einwith
erforderlich).r
ead ist der Standard-Modus für das öffnen von Dateien, also nicht nötig. Nur einige freundliche stilistische Empfehlungen- Gibt es etwas in diesem problem, dass es spezifisch für v3.2 von Python, oder könnte dies gelten für Allgemeine Python (in dem Fall hinzufügen, dass tag erhalten Sie weitere Ansichten - und potenziell bessere/schnellere Antworten)
- Sie sagen, dass difflib ist "geben Sie Fehler". Was sind die Fehler? Wenn es eine Ausnahme auszulösen, können Sie den stack-trace?
- warum haben Sie beide
import difflib
sowiefrom difflib import *
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich habe versucht den code und das Problem entdeckt.
Den
Differ.compare()
Methode erwartet zwei Listen von strings, die die Zeilen der beiden Texte. Jedoch aufgrund deritem.split()
fordert, Ihr die Listentemp3
undtemp4
sind Listen von Listen (ein Zeichen lang) Saiten.Ich bin mir nicht sicher, was genau Sie wollen zu tun-split, also ich bin mir nicht sicher, was der beste fix ist. Wenn Sie wirklich wollen, es Ihnen zu sagen, die einzelnen Charaktere wurden Hinzugefügt oder entfernt, können Sie ersetzen Sie Ihre Anrufe zu
append()
mitextend()
in den zwei for-Schleifen. Aber das scheint nicht sehr hilfreich, ehrlich gesagt.Eher die Spaltung ist ein Fehler. Statt Schleifen über die Zeilen in den Dateien nur Lesen Sie alle in Listen mit
readlines()
lassen und die Unterscheiden sich seine Arbeit auf Sie.Wenn Sie wollen, um einige der Filterung auf das, was zählt, ist die Differenz (ignorieren von whitespace-Unterschiede, oder was auch immer), sollten Sie erkunden die difflib Dokumentation, und übergeben Sie eine entsprechende Funktion wie die
linejunk
odercharjunk
Parameter der Verschieden Konstruktor.