【问题标题】:What exactly does a non-shallow filecmp.cmp do?非浅层文件cmp.cmp 究竟做了什么?
【发布时间】:2010-08-06 06:38:32
【问题描述】:

我使用的是 Python 2.6.2。 docs for the filecmp module 说:

filecmp 模块定义了比较文件和目录的函数,以及各种可选的时间/正确性权衡。

以及,filecmp.cmp 函数:

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

比较名为 f1 和 f2 的文件,如果相等则返回 True,否则返回 False。

除非给定了 shallow 并且为 false,否则具有相同 os.stat() 签名的文件将被视为相等。

他们不做的是指定使用shallow=False 获得的正确级别。那么,shallow=False 做了什么?它有多正确?

【问题讨论】:

    标签: python filecompare


    【解决方案1】:

    咨询source filecmp.py 表明,如果shallow=Falsefilecmp.cmp 首先检查os.stat() 的一些选择属性,无论shallowTrue 还是False。如果检查的 stat 属性相同,则返回 True。否则,它会检查其内部缓存以查看文件是否已在之前进行过比较。如果有,则返回True。否则,它会从两个文件中读取BUFSIZE = 8*1024 数据块,并进行精确的内容比较,直到到达文件末尾。如果两个文件的内容完全相同,则返回True

    【讨论】:

    • 我最近在Python 3.3的官方文档中澄清了这一点
    • 如何以及何时需要在两个文件之间进行“浅比较”?唯一的区别是它也将'mode mtime size'相等视为文件相等,但这对我来说没有多大意义。
    • @RobertBean 它为您节省了大量的处理时间。我认为他们确定大多数时间具有相同签名的文件实际上是相同的。
    • @NullUserException 由于 os.stat 包含 inode 编号,那么 os.stat 只有在文件是硬链接时才相同,对吗? (虽然这可能因文件系统而异,并且 os.stat 遵循符号链接?)
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    • 2012-10-17
    • 2021-06-04
    • 1970-01-01
    • 2018-07-30
    • 2019-10-06
    相关资源
    最近更新 更多