2017-10-06 1 views
0

Ich habe nach ähnlichen Fragen zu SO gesucht, aber nichts gefunden, was für mich funktioniert hat.Python - Wie man zwei Dateien vergleicht und nur die verschiedenen Zeilen in einer dritten Datei ausgibt

Ich habe zwei große Dateien, sie sollten identisch sein, aber eine der Dateien ist 60 Zeilen länger als die andere. Ich möchte wissen, was diese Zeilen sind und wo ich sie finden kann.

Ich habe gelesen, dass man difflib verwenden kann, um dies zu tun, aber ich kann nicht herausfinden, wie es geht. Ich bekomme immer + und - in der Datei, aber das will ich nicht. Ich möchte nur beide Dateien durchsuchen und die ungewöhnlichen 60 Zeilen in einer dritten Datei melden.

Ich habe diesen Code geschrieben, aber es druckt nicht die verschiedenen Zeilen aus.

f1 = open('file1.txt','r') 
f2 = open('file2.txt','r') 
f3 = open('file3.txt','w') 

diff = set(f1).difference(f2) 
same.discard('\n') 

for line in same: 
    f3.write(line) 
+2

Mögliche Duplikat [in Python zwei Dateien Bericht Unterschied vergleichen] (https://stackoverflow.com/questions/19120489/compare-two-files-report-difference-in-python) –

+0

Können Sie nicht einfach 'diff' von deiner Shell ausführen? Warum müssen Sie Ihr eigenes Dienstprogramm schreiben? Es ist ein gelöstes Problem. –

+0

Was ist die Ausgabe, die Sie bekommen? –

Antwort

2

Nun, könnten Sie so etwas tun:

with open('file1.txt') as infile: 
    f1 = infile.readlines() 

with open('file2.txt') as infile: 
    f2 = infile.readlines() 

only_in_f1 = [i for i in f1 if i not in f2] 
only_in_f2 = [i for i in f2 if i not in f1] 

with open('file3.txt', 'w') as outfile: 
    if only_in_f1: 
     outfile.write('Lines only in file 1:\n') 
     for line in only_in_f1: 
      outfile.write(line) 

    if only_in_f2: 
     outfile.write('Lines only in file 2:\n') 
     for line in only_in_f2: 
      outfile.write(line) 

Hinweis: gleicher Inhalt in verschiedenen Linien als Differenz behandelt

0

Sie dies unter Verwendung von Sätzen leicht lösen können.

set1 = set() 
with open(file1) as f: 
    for line in f: 
     set1.add(line.strip()) 
#Repeat for set 2 
with open(diff_file, 'w') as f: 
    for line in set2 - set1: 
     f.write(line + '\n') 
Verwandte Themen