2010-10-03 150 views
2

我将在python上实现递归文件夹比较。你认为最好的算法是什么?使用python递归比较文件夹

  1. 获取文件的两个列表的文件夹
  2. 排序两个列表
  3. 比较使用filecmp模块文件
  4. 重复以上步骤,每个文件夹递归

在结果我需要只获取不同文件的列表(这里不需要内容差异),其中一个可比文件夹中缺少的文件列表。

谢谢。

回答

1

如果我是你,我会检查是否有其他软件尚未实现此功能,如rsyncdiff。对于我所看到的,两者都有你需要的功能。有关于它的更多信息here

如果你真的需要做到这在Python,我想稍微修改你的算法,使得它看起来是这样的:

  1. 商店使用os.walk两个单独的列表变量两条路径的内容;
  2. 迭代第一个列表的每个值以在第二个列表中找到对应的值;
  3. 如果找到相应的值,请使用filecmp模块进行比较。否则,显示丢失的文件;
  4. 删除第二个列表中的值;
  5. 转到#2,直到第一个列表为空;
  6. 打印第二个列表中的所有内容;
+0

好像你会通过使用集合而不是列表获得一些速度。 – intuited 2010-10-04 00:27:41

+0

如果我将第二个列表中的新文件删除但第一个列表中缺少了什么?根据这些步骤,我将拥有最初仅在第一个列表中的文件的相同列表。也许你可以根据你列出的步骤在这里写下代码示例? – yart 2010-12-20 00:03:03

2

对目录和每个文件存储进行递归搜索md5或sha字典中文件的校验和作为键和路径/名称作为值。为这两个目录制作这本字典。然后,您可以从每个目录中删除对,并且结果丢失/不同的文件。

这将使简单的O(n)算法,其中n是目录的卷。