2016-07-19 6 views
0

Ich versuche, zwei Liste von Dateien aus verschiedenen Verzeichnissen zu vergleichen. Wenn eine Übereinstimmung gefunden wird, sollte die Datei in ein anderes Verzeichnis geschrieben werden. Unten ist mein Code.Vergleichen Sie zwei Liste von Dateien zwischen verschiedenen Verzeichnissen in Python

filelist= ['sample2\\output_1.txt','sample2\\output_2.txt','sample3\\asn_todlx_mf_output_3.txt'] 
filelist2 = ['sample\\output_1.txt','sample\\output_3.txt','sample\\output_7.txt','sample\\output_2.txt','sample1\\output_3.txt'] 
a = 1 
for name in filelist: 
    a = a + 1 
    for x in filelist2 : 
     file1 = open(x, 'r') 
     file2 = open(name,'r') 
     FO = open('right\\right_file'+str(a)+'.txt', 'w') 

     for line1 in file1: 
      for line2 in file2: 
       if line1 == line2: 
        FO.write("%s\n" %(line1)) 

     FO.close() 
     file1.close() 
     file2.close() 

Zum Beispiel output1 von ‚Mustermappe (Dateiliste)‘ verglichen mit allen Dateien in ‚sample2 (Dateiliste)‘, wenn es eine Übereinstimmung ist, sollte es ‚richtig‘ geschrieben wird Ordner wie ‚right_file1.txt '. Aber das Skript erzeugt 15 Dateien von' right_file1.txt 'bis' right_file15.txt '. Es funktioniert gut, wenn ich versuchte, eine Datei mit der Liste der Dateien zu vergleichen. Bitte hilf mir, das zu bekommen.

Antwort

0

So würde ich es tun.

filelist1 = ['sample2\\output_1.txt','sample2\\output_2.txt','sample3\\asn_todlx_mf_output_3.txt'] 
filelist2 = ['sample\\output_1.txt','sample\\output_3.txt','sample\\output_7.txt','sample\\output_2.txt','sample1\\output_3.txt'] 

dir1 = filelist1[0].split('\\')[:-1] 
filelist1 = [x.split('\\')[-1] for x in filelist1] 

dir2 = filelist2[0].split('\\')[:-1] 
filelist2 = [x.split('\\')[-1] for x in filelist2] 

common = [x for x in filelist1 if x in filelist2] 

print(common) 
# ['output_1.txt', 'output_2.txt'] 

a = 1 
for file in common: 
    a += 1 
    with open(dir1 + '\\' + file) as f_in: 
     contents = f_in.readlines() 
     with open('right\\right_file' + str(a) + '.txt', 'w') as f_out: 
      f_out.write(contents) 

Zunächst suche ich die Dateien, die zwischen den beiden Listen gemeinsam sind und i speichern ihre Namen in common. Dann für alle Dateien in der common Liste ich ihre Kopie in diesem anderen Verzeichnis erstellen, wie Sie erwähnten. Beachten Sie die Verwendung von with, die das Schließen und Spülen der Dateien behandelt. Verwenden Sie das, anstatt die Datei manuell zu verwalten, es sei denn, Sie haben einen Grund, dies nicht zu tun.

Schließlich habe ich nicht die Logik hinter Ihrem Iterator a bekommen, aber ich habe es nur von Ihnen kopiert. Es beginnt mit Wert 2! Wenn Sie die Nummer aus der kopierten Datei holen wollen, müssen Sie anders vorgehen. Ihr Weg macht den Ursprung der erzeugten Datei unauffindbar.

Lassen Sie mich wissen, ob das für Sie funktioniert hat.

+0

Aber die Sache ist, 'output1' kann sogar 'output2' oder 'output3' übereinstimmen! – vignesh

+0

@vignesh Oh, ich verstehe. Also wollen Sie die Dateien nach Inhalt und nicht nach Dateiname vergleichen, oder? –

+0

das ist genau ich suche – vignesh