使用Python递归比较文件夹

2 投票
2 回答
1930 浏览
提问于 2025-04-16 04:56

我打算在Python中实现一个递归的文件夹比较功能。你觉得用什么算法比较好呢?

  1. 先获取两个文件夹里的文件列表
  2. 对这两个列表进行排序
  3. 使用filecmp模块来比较文件
  4. 对每个文件夹重复这个过程

最后,我需要得到的只是不同的文件列表(这里不需要内容上的差异),以及在其中一个可比较的文件夹中缺失的文件列表。

谢谢。

2 个回答

1

如果我是你,我会先看看有没有其他软件已经实现了这个功能,比如 rsyncdiff。从我看到的情况来看,这两个软件都有你需要的功能。关于这些软件的更多信息可以在 这里找到。

如果你真的想用Python来做这个,我会稍微调整一下你的算法,让它看起来像这样:

  1. os.walk 把两个路径的内容分别存到两个列表变量里;
  2. 遍历第一个列表中的每个值,去找第二个列表中对应的值;
  3. 如果找到了对应的值,就用 filecmp 模块进行比较。否则,显示缺失的文件;
  4. 把找到的值从第二个列表中删除;
  5. 回到第2步,直到第一个列表为空为止;
  6. 把第二个列表中剩下的所有内容打印出来;
2

在一个文件夹里进行递归搜索,对于每个文件,计算它的md5或sha校验和,并把这个校验和作为字典的键,把文件的路径和名字作为值存储起来。对两个文件夹都这样做。然后你可以从每个文件夹中移除相同的键值对,最后得到的就是那些缺失或不同的文件。

这样做会形成一个简单的O(n)算法,其中n是文件夹的大小。

撰写回答