【发布时间】:2017-10-03 04:05:29
【问题描述】:
使用 Windows 7,我有两个文件夹,一个是我处理文件的“主”文件夹,另一个是 NAS4Free 服务器上的“备份”文件夹。
我有 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
为了使主文件夹和备份文件夹保持同步,我首先考虑对整个文件夹进行 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) 会返回误报或误报?我可以相信它吗?
还有一个可能的“子问题”,文件cmp.cmp() 使用os.stat() 返回的哪些具体值?
(如果你好奇我对这些文件做了什么,我在这里讨论一下:https://hikearizona.com/dex2/viewtopic.php?f=78&t=9538)
【问题讨论】:
-
我真的很惊讶你没有更多的赞成票。这似乎是一件非常有用的事情。
标签: python python-3.x