代码之家  ›  专栏  ›  技术社区  ›  S Andrew

如何在python中比较两个目录并输出更改后的文件

  •  0
  • S Andrew  · 技术社区  · 6 年前

    我在linux中有两个目录,其中有两个文件。我需要比较这两个目录并打印出更改的文件。

    folder1:
      file1.txt   file2.txt
    
    folder2:
      file1.txt   file2.txt
    

    我需要比较一下 folder1 具有 folder2 并打印出这两个目录中不相同的文件名。我想先用 ls 命令获取文件列表并将其放入 list 然后使用python的 filecmp ,如下所示:

    import os
    import filecmp
    
    folder1_path = "/home/user/folder1/"
    folder2_path = "/home/user/folder2/"
    
    def ls(path):
       all = []
       walked = os.walk(path)
       for base, sub_f, files in walked:           
           for sub in sub_f:           
                entry = os.path.join(base,sub)
                entry = entry[len(path):].strip("\\")
                all.append(entry)
    
           for file in files:          
               entry = os.path.join(base,file)
               entry = entry[len(path):].strip("\\")
               all.append(entry)
        all.sort()
        return all
    
    def folder_diff(folder1_path, folder2_path):
        folder1_list = ls(folder1_path)
        folder2_list = ls(folder2_path)
    
        for item1, item2 in zip(folder1_list, folder2_list):
            res = filecmp.cmp(folder1_path + item1, folder2_path + item2)
    
    data = folder_diff(folder1_path, folder2_path)
    print(data)
    

    这是一个错误 FileNotFound 文件同时存在于两个文件夹中。有谁能建议一下这方面的最新情况吗?谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   Oumab10    6 年前

    为了只有一个功能,您可以使用:

    def folder_diff():
        folder1 = os.listdir(PATH1) # folder containing your files
        folder2 = os.listdir(PATH2) # the other folder
    
        for item1 in folder1:
            for item2 in folder2:
                if(item1==item2):
                    res = filecmp.cmp(PATH1+item1, PATH2+item2)
    
    if __name__ == "__main__":
    import os
    import filecmp
    PATH1 = ''
    PATH2 = ''
    data = folder_diff()
    print(data)
    
        2
  •  0
  •   Raja Sattiraju    6 年前

    您还可以使用 glob 模块

    import os
    import glob
    import filecmp
    
    comparison = []
    for each in glob.glob('home/user/folder1/**'):
        for each1 in glob.glob('home/user/folder2/**'):
            if os.path.basename(each) == os.path.basename(each1):
                comparison.append(filecmp.cmp(each, each1))
    
    print(comparison)