Pythonでdifflibを使用して、2つの.textファイルの比較
質問
私は2つのテキストファイルと出力と一致しない比較ファイルの最初の文字列を比較しようとしていますが、私は、Pythonに非常に新しいですので、難しさを持っています。誰が私にこのモジュールを使用するためのサンプル方法をお願いすることができます。
私はのような何かをしようとするときます:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
私はLENを持っていないタイプ「ファイル」のオブジェクトを言ってエラーを取得します。
解決
まず第一に、あなたはファイル、difflib.SequenceMatcherに文字列を渡す必要はありません
# Like so
difflib.SequenceMatcher(None, str1, str2)
# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
それはとにかくあなたのエラーを修正します。最初の非一致する文字列を取得するには、私は difflibドキュメントの素晴らしい世界へご案内します。>
他のヒント
ここでは、Python difflib ...
を使用して2つのファイルの内容を比較する簡単な例でありますimport difflib
file1 = "myFile1.txt"
file2 = "myFile2.txt"
diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),
あなたは両方のファイルが存在するか?
ちょうどそれをテストし、私は完璧な結果を得ることができます。
私はのようなものを使用した結果を取得するには
import difflib
diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())
try:
while 1:
print diff.next(),
except:
pass
それらが異なる場合は、各行の最初の文字は示しています。 例えば:「+」次の行はなど、追加されたことを意味します。
あなたがすべてでdifflibを必要としない場合がありますように
これが鳴ります。あなたが行で行を比較している場合は、このような何かをしようとします:
test_lines = open("test.txt").readlines()
correct_lines = open("correct.txt").readlines()
for test, correct in zip(test_lines, correct_lines):
if test != correct:
print "Oh no! Expected %r; got %r." % (correct, test)
break
else:
len_diff = len(test_lines) - len(correct_lines)
if len_diff > 0:
print "Test file had too much data."
elif len_diff < 0:
print "Test file had too little data."
else:
print "Everything was correct!"
2つのテキストファイルがラインによって同じラインであるかどうかをチェックするための別の方法が容易。それを試してみてください。
fname1 = 'text1.txt'
fname2 = 'text2.txt'
f1 = open(fname1)
f2 = open(fname2)
lines1 = f1.readlines()
lines2 = f2.readlines()
i = 0
f1.seek(0)
f2.seek(0)
for line1 in f1:
if lines1[i] != lines2[i]:
print(lines1[i])
exit(0)
i = i+1
print("both are equal")
f1.close()
f2.close()
それ以外の場合は、あなたが使用することができますfilecmpでのpythonで定義済みのファイルがあります。
import filecmp
fname1 = 'text1.txt'
fname2 = 'text2.txt'
print(filecmp.cmp(fname1, fname2))
:)
所属していません StackOverflow