Vergleicht man zwei .text Dateien mit difflib in Python
Frage
Ich versuche, zwei Textdateien und Ausgabe der ersten Strings in der Vergleichsdatei zu vergleichen, die nicht übereinstimmt, aber Schwierigkeiten habe, da ich zu Python bin sehr neu. Kann jemand mir bitte eine Probe Art und Weise geben, um dieses Modul zu verwenden.
Wenn ich versuche, so etwas wie:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
Ich erhalte einen Fehler Objekt vom Typ ‚Datei‘ zu sagen hat keine len.
Lösung
Für den Anfang müssen Sie Strings difflib.SequenceMatcher passieren, keine Dateien:
# Like so
difflib.SequenceMatcher(None, str1, str2)
# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
Das wird Ihre Fehler beheben sowieso. Um den ersten nicht-passenden String zu bekommen, werde ich Dich in der wunderbaren Welt der difflib Dokumentation verweisen.
Andere Tipps
Hier ist ein kurzes Beispiel den Inhalt von zwei Dateien zu vergleichen mit Python difflib ...
import difflib
file1 = "myFile1.txt"
file2 = "myFile2.txt"
diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),
Sind Sie sicher, dass beide Dateien vorhanden sind?
es getestet und ich bekommen ein perfektes Ergebnis.
Um die Ergebnisse zu erhalten, verwende ich so etwas wie:
import difflib
diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())
try:
while 1:
print diff.next(),
except:
pass
das erste Zeichen jeder Zeile zeigt an, ob sie verschieden sind: zB .: '+' bedeutet, dass die folgende Zeile hinzugefügt wurde, etc.
Es klingt wie Sie nicht difflib überhaupt benötigen. Wenn Sie Linie sind zu vergleichen Zeile, versuchen, etwas wie folgt aus:
test_lines = open("test.txt").readlines()
correct_lines = open("correct.txt").readlines()
for test, correct in zip(test_lines, correct_lines):
if test != correct:
print "Oh no! Expected %r; got %r." % (correct, test)
break
else:
len_diff = len(test_lines) - len(correct_lines)
if len_diff > 0:
print "Test file had too much data."
elif len_diff < 0:
print "Test file had too little data."
else:
print "Everything was correct!"
Eine weitere einfachere Methode zu prüfen, ob zwei Textdateien gleiche Zeile für Zeilen sind. Probieren Sie es aus.
fname1 = 'text1.txt'
fname2 = 'text2.txt'
f1 = open(fname1)
f2 = open(fname2)
lines1 = f1.readlines()
lines2 = f2.readlines()
i = 0
f1.seek(0)
f2.seek(0)
for line1 in f1:
if lines1[i] != lines2[i]:
print(lines1[i])
exit(0)
i = i+1
print("both are equal")
f1.close()
f2.close()
sonst gibt es eine vordefinierte Datei in Python in filecmp, die Sie verwenden können.
import filecmp
fname1 = 'text1.txt'
fname2 = 'text2.txt'
print(filecmp.cmp(fname1, fname2))
:)