2017-12-19 7 views
-2

2つのテキストファイルが比較され、出力が一致するか、一致しません。私のプログラムは、一致した出力を与えるのではなく、同じテキストファイルを比較しようとしても "一致しない"と出力します。pythonを使ってテキストファイルを比較するか、一致しないか?

file1 = open('dev1.txt', 'r') 
file2 = open('dev1.txt', 'r') 

num = 0 
for line1 in file1: 
    for line2 in file2: 
     if line1 != line2: 
      num += 1 

if num >= 1: 
    print "not matched" 
else: 
    print "matched" 
+1

なぜネストループを使用していますか?それらをまとめて 'zip'する必要があります。 –

+0

file1のすべての行をfile2のすべての行と比較しています(1_1 - > 2_1,2_2,2_3など)。すべての(行1 ==行2のzip(file1.readlines()、file2.readlines()) ' – Bahrom

+0

質問は2つの異なるデバイス設定ファイルを比較し、小さな変化が見られます(スペースとブランクは破棄されました)。 –

答えて

2

2つのファイルを1行ずつ比較する場合は、ネストループを使用しないでください。例えば、

for l1 in f1: 
    for l1 in f2: 
     ... 

このことは、意味的に意味をなさない、「f1内のすべての行について、f2内のすべての行にその行を比較します」。

代わりに、相当の行を比較してください。これを行う最も簡単な方法はzipです。

for l1, l2 in zip(f1, f2): 
    ... 

手段、理にかなって、「f2内の対応する行にf1の各行を比較」。

次に、2行が等しくないかどうかを確認して、それに応じてメッセージを出力するようにしてください。その場合は、breakステートメントで短い比較を省略できます。 for...elseイディオムを使用するので、フラグやカウンタは必要ありません。

for l1, l2 in zip(f1, f2): 
    if l1 != l2: 
     print('not matched') 
     break 

else: 
    print "matched" 

elseはループが自然に終了した場合にのみ実行されます - つまり、breakに遭遇していないとき。

、しかし、あなたが等しくありませんでしたすべての行の数を取得したい場合、あなたは発電機の理解とsumを使用することができます -

diff = sum(1 for l1, l2 in zip(f1, f2) if l1 != l2) 
print('not matched' if diff else 'matched') 

ここでの考え方は、あなたが持つ有益な何かを行うことができるということですdiffの後。

+0

ありがとう、これはいくつかのケースでうまくいきました!...両方のテキストファイルが同じ行数と同じテキストを持っているが混乱している場合、...コードが機能しませんでした。 –

+0

@ChaitanyaGkあなたはそのように質問でそれを指定しなかったので、それはそのようには機能しませんでした。とにかくそれをもう一度見てみましょう。今すぐ編集しないでください。この質問は完全に変更されます。新しいものを開きます。 –

+0

@ChaitanyaGk実際には、 'l1!= l2'を' sorted(l1)!= sorted(l2) 'に変更してください。それから、混乱した手紙のために働くだろう。 –