What exactly does a non-shallow filecmp.cmp do?
I'm using Python 2.6.2. The docs for the filecmp module say:
The filecmp module defines fu开发者_C百科nctions to compare files and directories, with various optional time/correctness trade-offs.
and, of the filecmp.cmp function:
filecmp.cmp(f1, f2[, shallow])
Compare the files named f1 and f2, returning True if they seem equal, False otherwise.
Unless shallow is given and is false, files with identical os.stat() signatures are taken to be equal.
What they don't do is specify just what is the correctness level one obtains with shallow=False
. So, what does shallow=False
do? How correct is it?
Consulting the source filecmp.py
reveals that if shallow=False
, filecmp.cmp
first checks a few select properties of os.stat()
, regardless of whether shallow
is True
or False
. If the stat properties that are examined are the same, it returns True
. Else, it checks its internal cache to see if the files have already been compared earlier. If it has, it returns True
. Else, it reads BUFSIZE = 8*1024
chunks of data from both files and does an exact contents comparison until it reaches the end of the file. It returns True
if the two files have exactly the same contents.
精彩评论