非浅层filecmp.cmp具体做什么?

13 投票
1 回答
11068 浏览
提问于 2025-04-16 02:24

我正在使用Python 2.6.2。关于filecmp模块的文档说:

filecmp模块定义了一些函数,用来比较文件和文件夹,并且有不同的选项可以在速度和准确性之间做选择。

关于filecmp.cmp这个函数,文档中提到:

filecmp.cmp(f1, f2[, shallow])

比较名为f1和f2的文件,如果它们看起来相等,就返回True,否则返回False。

除非给shallow参数赋值为False,否则会认为那些具有相同os.stat()信息的文件是相等的。

但是文档没有说明当shallow=False时,准确性到底有多高。那么,shallow=False到底是干什么的?它的准确性如何呢?

1 个回答

14

查看源代码 filecmp.py可以发现,如果设置了shallow=False,那么filecmp.cmp会先检查一些特定的文件属性,这个检查是通过os.stat()来完成的,不管shallowTrue还是False。如果检查到的属性都一样,它就会返回True,表示这两个文件是相同的。如果属性不一样,它会查看内部缓存,看看这两个文件之前是否已经比较过。如果比较过,它也会返回True。如果都没有,它就会从两个文件中读取BUFSIZE = 8*1024大小的数据块,逐块比较文件内容,直到文件的末尾。如果两个文件的内容完全一样,它就会返回True

撰写回答