【问题标题】:Compare folders recursively using python使用python递归比较文件夹
【发布时间】:2010-10-03 22:43:30
【问题描述】:

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

  1. 获取文件夹的两个文件列表
  2. 对两个列表进行排序
  3. 使用 filecmp 模块比较文件
  4. 递归地对每个文件夹重复

结果我只需要获取不同文件的列表(此处不需要内容差异),可比较文件夹之一中缺少的文件列表。

谢谢。

【问题讨论】:

    标签: python algorithm


    【解决方案1】:

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

    这将制作简单的 O(n) 算法,其中 n 是目录的体积。

    【讨论】:

      【解决方案2】:

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

      如果您真的需要在 Python 中执行此操作,我会稍微修改您的算法,使其看起来像这样:

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

      【讨论】:

      • 看起来你会通过使用集合而不是列表来获得一些速度。
      • 如果我在第二个列表中有新文件,但在第一个列表中缺少该文件怎么办?根据这些步骤,我将拥有最初仅在第一个列表中的相同文件列表。也许您可以根据您列出的步骤在这里编写代码示例?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2014-03-29
      相关资源
      最近更新 更多