我正在尝试比较两个文本文件,并输出比较文件中的第一个字符串,但是由于我对python很新,因此遇到了困难。有人可以给我一个使用这个模块的示例方法。
当我尝试类似的事情时:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
我收到一个错误,说'file'类型的对象没有len。
答案 0 :(得分:30)
对于初学者,您需要将字符串传递给difflib.SequenceMatcher,而不是文件:
# Like so
difflib.SequenceMatcher(None, str1, str2)
# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
无论如何,这将修复你的错误。为了获得第一个不匹配的字符串,我将引导您进入difflib documentation.
的精彩世界答案 1 :(得分:9)
以下是使用Python difflib ...
比较两个文件内容的快速示例import difflib
file1 = "myFile1.txt"
file2 = "myFile2.txt"
diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),
答案 2 :(得分:5)
你确定这两个文件都存在吗?
刚刚测试过,我得到了一个完美的结果。
为了获得结果,我使用了类似的东西:
import difflib
diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())
try:
while 1:
print diff.next(),
except:
pass
每行的第一个字符表示它们是否不同: 例如:'+'表示已添加以下行等
答案 3 :(得分:3)
听起来你根本不需要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!"
答案 4 :(得分:0)
另一种更简便的方法来逐行检查两个文本文件是否相同。试试吧。
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'
f1 = open(fname1)
f2 = open(fname2)
print(filecmp.cmp(fname1, fname2))
:)