1. 程式人生 > 程式設計 >python filecmp.dircmp實現遞迴比對兩個目錄的方法

python filecmp.dircmp實現遞迴比對兩個目錄的方法

使用python filecmp模組的dircmp類可以很方便的比對兩個目錄,dircmp的用法已經有很多文章介紹,不再贅述。

可以help(filecmp.dircmp)檢視幫助資訊,其中提到的x.report()、x.report_partial_closure(),都只能列印兩目錄一級子目錄的比較資訊。而x.report_full_closure()可以遞迴列印所有子目錄的比對資訊,但是輸出太多,大多數情況下我們可能只關心兩目錄的不同之處。

help(filecmp.dircmp) 摘選:            
 
 | High level usage:              
 | x = dircmp(dir1,dir2)             
 | x.report() -> prints a report on the differences between dir1 and dir2 
 |  or                 
 | x.report_partial_closure() -> prints report on differences between dir1
 |   and dir2,and reports on common immediate subdirectories.  
 | x.report_full_closure() -> like report_partial_closure,|   but fully recursive. 

本文編寫的指令碼,重點關注並實現兩個目標:

1)遞迴比對兩個目錄及其所有子目錄。

2)僅輸出兩目錄不同之處,包括檔名相同(common_files)但是檔案不一致(diff_files),以及左、右目錄中獨有的檔案或子目錄。

py指令碼compare_dir.py內容如下:

# -*- coding: utf-8 -*-
"""
@desc 使用filecmp.dircmp遞迴比對兩個目錄,輸出比對結果以及統計資訊。
@author longfeiwlf
@date 2020-5-20
"""
 
from filecmp import dircmp
import sys
 
# 定義全域性變數:
number_different_files = 0 # 檔名相同但不一致的檔案數
number_left_only = 0 # 左邊目錄獨有的檔案或目錄數
number_right_only = 0 # 右邊目錄獨有的檔案或目錄數
 
 
def print_diff(dcmp):
 """遞迴比對兩目錄,如果有不同之處,打印出來,同時累加統計計數。"""
 global number_different_files
 global number_left_only
 global number_right_only
 for name in dcmp.diff_files:
  print("diff_file found: %s/%s" % (dcmp.left,name))
  number_different_files += 1
 for name_left in dcmp.left_only:
  print("left_only found: %s/%s" % (dcmp.left,name_left))
  number_left_only += 1
 for name_right in dcmp.right_only:
  print("right_only found: %s/%s" % (dcmp.right,name_right))
  number_right_only += 1
 for sub_dcmp in dcmp.subdirs.values():
  print_diff(sub_dcmp) # 遞迴比較子目錄
 
 
if __name__ == '__main__':
 try:
  mydcmp = dircmp(sys.argv[1],sys.argv[2])
 except IndexError as ie:
  print(ie)
  print("使用方法:python compare_dir_cn.py 目錄1 目錄2")
 else:
  print("\n比對結果詳情: ")
  print_diff(mydcmp)
  if (number_different_files == 0 and number_left_only == 0
    and number_right_only == 0):
   print("\n兩個目錄完全一致!")
  else:
   print("\n比對結果統計:")
   print("Total Number of different files is: " 
     + str(number_different_files))
   print("Total Number of files or directories only in '"
     + sys.argv[1] + "' is: " + str(number_left_only))
   print("Total Number of files or directories only in '"
     + sys.argv[2] + "' is: " + str(number_right_only))

compare_dir.py指令碼使用舉例:

python filecmp.dircmp實現遞迴比對兩個目錄的方法

總結

到此這篇關於filecmp.dircmp實現遞迴比對兩個目錄的文章就介紹到這了,更多相關filecmp.dircmp實現遞迴比對兩個目錄內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!