2016-06-14 9 views
0

Ich möchte zwei verschiedene Dateien in Python vergleichen. Sie enthalten Zeilen mit Wahrscheinlichkeiten und jede Zeile hat eine In-ID am Ende der Datei. Ich muss das Verhältnis jeder ID berechnen. Das Problem ist, dass jede Zeile eine unterschiedliche Anzahl von Wahrscheinlichkeiten enthalten kann und schließlich jeder Text eine andere Anzahl von Zeilen hat. Es ist mir gelungen, ein Skript zu erstellen, das nur zwei Dateien mit einer Zeile vergleicht, aber ich weiß nicht, wie ich das für jede Zeile im Text machen soll. Hier ist mein Skript so weit:Vergleichen Sie zwei Dateien Zeile für Zeile in Python

#!/usr/bin/python 
import math 
import operator 
f = open('output.txt','w') 
file1= open("test.ppx1","r") 
file2= open("test.prob1","r") 
words = list(file1.read().split()) 
words2 = list(file2.read().split()) 
id1=words[-1] 
id2=words2[-1] 
words.remove(id1) 
words2.remove(id2) 
words[:]=[x[:12] for x in words] 
words2[:]=[x[:12] for x in words2] 
words=map(float,words) 
words2=map(float,words2) 
words=[math.log(y,10) for y in words] 
words2=[math.log(y,10) for y in words2] 
words=sum(words) 
words2=sum(words2) 
ratio= words-words2 
print >>f, id1,words, words2,ratio 
+0

Können Sie Beispiele für die beiden Dateien auch zeigen? – NTAWolf

+0

2.506201d-08 2.346253d-02 1.282699d-02 3.366181d-05 1.821797d-07 1.424501d-07 utt-0000000001 2.506201d-08 2.346253d-02 1.282699d-02 3.366181d-05 1.821797d-07 1.424501 e-07 utt-0000000002 2.506201d-08 2.346253d-02 1.282699d-02 3.336181d-05 1.821797d-07 1.424501d-07 utt-0000000003 für die erste Datei – oezlem

+0

2.506201d-08 2.346253d-02 1.282699e- 02 3.336181d-05 1.821797d-07 1.424501d-07 2.506201d-08 1.821797d-07 1.424501d-07 utt-0000000001 2.506201d-08 2.346253d-02 1.282699d-02 3.366181d-05 1.821797d-07 1.424501 e-07 utt-0000000002 2.506201d-08 2.346253d-02 1.282699d-02 3.336181d-05 1.821797d-07 1.424501d-07 1.424501d-07 1.424501d-07 utt-0000000003 – oezlem

Antwort

1

Sie möchten möglicherweise den gelesenen Inhalt beider Dateien zippen und iterieren über sie. Beachten Sie, dass bei Verwendung von zip für Dateien mit unterschiedlichen Zeilenlängen alle Dateien die Länge der kürzesten kleinsten Dateilänge haben. Siehe

import math 


file_list = [] 

with open("test.ppx1", "r") as file1: 
    file_list.append(file1.readlines()) 

with open("test.prob1", "r") as file2: 
    file_list.append(file2.readlines()) 

with open('output.txt', 'w') as file_out: 
    for file1_str, file2_str in zip(*file_list): 
     file1_list = file1_str.split() 
     file2_list = file2_str.split() 
     id1, id2 = file1_list.pop(), file2_list.pop() 
     p1 = map(float, file1_list) 
     p2 = map(float, file2_list) 
     p1 = map(lambda y: math.log(y, 10), p1) 
     p2 = map(lambda y: math.log(y, 10), p2) 
     s1, s2 = sum(p1), sum(p2) 
     ratio = s1 - s2 
     file_out.write("{} {} {} {}".format(id1, s1, s2, ratio)) 
+0

Traceback (letzten Aufruf letzten): Datei "log2.py", Zeile 11, in p1 = map (float, file1_list.split()) ValueError: Konnte String nicht in Float konvertieren:. Ich habe diesen Fehler – oezlem

+0

Ich habe die Antwort überarbeitet. Ich habe nie daran gedacht, dass die IDs nicht in Floats umgewandelt werden können. –

Verwandte Themen