filecmp.cmp() doesn't seem to do what it says in the documentation

Terry Reedy tjreedy at udel.edu
Mon Sep 6 14:27:25 EDT 2010


On 9/6/2010 1:18 PM, tinnews at isbd.co.uk wrote:
> I'm using filecmp.cmp() to compare some files (surprise!).
>
> The documentation says:-
>      Unless shallow is given and is false, files with identical
>      os.stat() signatures are taken to be equal.

Reword and read carefully: if shallow == True and signatures are 
identical, then files are taken to be equal.

Here is the corresponding code from Lib/filecmp.py:
     if shallow and s1 == s2:
         return True

Does not say the result for non-identical signatures ;-).

> I'm not setting shallow explicitly so it's True, thus the function
> should be comparing the os.stat() results.  However this doesn't seem
> to be the case as even if I touch one of the files to change it's
> access/modification date filecmp.cmp() still returns True.

Because it goes on to actually compare the files, and they are equal.

...
     result = _cache.get((f1, f2))
     if result and (s1, s2) == result[:2]:
         return result[2]
     outcome = _do_cmp(f1, f2)
     _cache[f1, f2] = s1, s2, outcome
     return outcome

Most of the stdlib files in Python are quite readable. I recommend it 
when you have questions.

-- 
Terry Jan Reedy




More information about the Python-list mailing list