filecmp.cmp()什么时候会返回误报或误报?

时间:2017-10-03 04:05:29

标签: python python-3.x

使用Windows 7,我有两个文件夹,一个用于处理文件的“Master”文件夹,以及一个NAS4Free服务器上的“Backup”文件夹。

我有超过800个jpg文件,总共2.6GB,大小从124KB到16MB不等。

我经常“交换”文件名,即:

rename 01-020.jpg 99-020.jpg
rename 01-040.jpg 01-020.jpg
rename 99-020.jpg 01-040.jpg

我还添加了新文件 - 01-030.jpg - 然后重新编号,即:

rename 01-020.jpg 99-020.jpg
rename 01-030.jpg 99-040.jpg
rename 01-040.jpg 99-060.jpg
rename 99-020.jpg 01-020.jpg
rename 99-040.jpg 01-040.jpg
rename 99-060.jpg 01-060.jpg

为了保持Master和Backup文件夹同步,我首先看了整个文件夹的XCOPY或ROBOCOPY,但这太费时了,特别是因为绝大多数文件没有改变。

我正在努力想出一个Python 3解决方案。我已经阅读了filecmp.cmp()的文档。令我担心的是声明:

  

“...如果他们似乎相等,则返回True”(强调我的)。

指定shallow = False似乎有点过分,导致filecmp比较1,600+文件的内容,当绝大多数比较都匹配时。

指定shallow = True会导致filecmp使用os.stat()函数。使用该函数运行测试,在filecmp返回True的两个文件上,stat返回的一些值是相同的,其他值是不同的。显然,filecmp不会使用stat返回的所有值来确定文件是否相等。

所以,我的问题:在“真实世界”的情况下,filecmp.cmp(file1,file2,shallow = True)会返回误报或误报吗?我能相信吗?

并且,一个可能的“子问题”,os.stat()返回的特定值是否会使用filecmp.cmp()?

(如果您对我正在处理的文件感到好奇,请在此处讨论:https://hikearizona.com/dex2/viewtopic.php?f=78&t=9538

1 个答案:

答案 0 :(得分:0)

仅当大小和修改时间属性值相同时,比较才会返回true。 只有在同时修改相同的确切字节数时,它才能返回误报。

模块文件引用,可用于确认上述内容:

摘录自cmp函数实现(filecmp.py)

.doOnNext()
上面使用的

_sig funcion(filecmp.py):

        s1 = _sig(os.stat(f1))
        s2 = _sig(os.stat(f2))
        if shallow and s1 == s2:
            return True