I am trying to compare two text files and output the first string in the comparison file that does not match but am having difficulty since I am very new to python. Can anybody please give me a sample way to use this module.
When I try something like:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
I get an error saying object of type ‘file’ has no len.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
For starters, you need to pass strings to difflib.SequenceMatcher, not files:
# Like so difflib.SequenceMatcher(None, str1, str2) # Or just read the files in difflib.SequenceMatcher(None, file1.read(), file2.read())
That’ll fix your error.
To get the first non-matching string, see the difflib documentation.
Method 2
Here is a quick example of comparing the contents of two files using Python difflib…
import difflib file1 = "myFile1.txt" file2 = "myFile2.txt" diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines()) print ''.join(diff),
Method 3
Are you sure both files exist ?
Just tested it and i get a perfect result.
To get the results i use something like:
import difflib
diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())
try:
while 1:
print diff.next(),
except:
pass
the first character of each line indicates if they are different:
eg.: ‘+’ means the following line has been added, etc.
Method 4
It sounds like you may not need difflib at all. If you’re comparing line by line, try something like this:
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!"
Method 5
Another easier method to check whether two text files are same line by line. Try it out.
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()
otherwise, there is a predefined file in python in filecmp which you can use.
import filecmp fname1 = 'text1.txt' fname2 = 'text2.txt' print(filecmp.cmp(fname1, fname2))
🙂
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0