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.

War es hilfreich?

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

:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top