2016-06-14 20 views
0

pythonで2つの異なるファイルを比較したいと思います。それらは確率を持つ行を含み、各行はファイルの最後にidを持ちます。私は各idの比率を計算する必要があります。問題は、各行に異なる数の確率が含まれ、最終的に各テキストに異なる数の行が含まれることです。私は2つのファイルを1行で比較するスクリプトを作成することに成功しましたが、テキストの各行に対してどのように行うのかわかりません。これまでのスクリプトはこれまで通りです:Pythonの2つのファイルを1行ずつ比較します

#!/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

2つのファイルの例も表示できますか。 – NTAWolf

+0

2.506201e-08 2.346253e-02 1.2382699e-02 3.336181e-05 1.821797e-07 1.424501e-07 utt-0000000001 2.506201e-082346253e-02 1.282699e-023336181e-05 1.821797e-07 1.424501 e-07 utt-0000000002 2.506201e-08 2.346253e-02 1.282699e-02 3.336181e-05 1.821797e-07第1ファイル用1.424501e-07 utt-0000000003 – oezlem

+0

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

答えて

1

両方のファイルの読み込み内容を解凍し、それらのファイルを繰り返し処理したいと思うかもしれません。可変長のファイルに対してzipを使用すると、すべてのファイルの長さが最短のファイル長になります。 Documentation of zip builtin function

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

トレースバック(最新のコール最後): ファイル "log2.py"、行11、 p1 = Map(float、file1_list.split()) ValueError:文字列をfloatに変換できませんでした:。 私はこのエラーがあります – oezlem

+0

私は答えを改訂しました。私は浮動小数点に変換可能ではないidsについては決して考えなかった。 –

関連する問題