python filecmp.dircmp實現(xiàn)遞歸比對兩個目錄的方法
使用python filecmp模塊的dircmp類可以很方便的比對兩個目錄,dircmp的用法已經(jīng)有很多文章介紹,不再贅述。
可以help(filecmp.dircmp)查看幫助信息,其中提到的x.report()、x.report_partial_closure(),都只能打印兩目錄一級子目錄的比較信息。而x.report_full_closure()可以遞歸打印所有子目錄的比對信息,但是輸出太多,大多數(shù)情況下我們可能只關心兩目錄的不同之處。
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.
本文編寫的腳本,重點關注并實現(xiàn)兩個目標:
1)遞歸比對兩個目錄及其所有子目錄。
2)僅輸出兩目錄不同之處,包括文件名相同(common_files)但是文件不一致(diff_files),以及左、右目錄中獨有的文件或子目錄。
py腳本compare_dir.py內容如下:
# -*- coding: utf-8 -*-
"""
@desc 使用filecmp.dircmp遞歸比對兩個目錄,輸出比對結果以及統(tǒng)計信息。
@author longfeiwlf
@date 2020-5-20
"""
from filecmp import dircmp
import sys
# 定義全局變量:
number_different_files = 0 # 文件名相同但不一致的文件數(shù)
number_left_only = 0 # 左邊目錄獨有的文件或目錄數(shù)
number_right_only = 0 # 右邊目錄獨有的文件或目錄數(shù)
def print_diff(dcmp):
"""遞歸比對兩目錄,如果有不同之處,打印出來,同時累加統(tǒng)計計數(shù)。"""
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比對結果統(tǒng)計:")
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腳本使用舉例:

總結
到此這篇關于filecmp.dircmp實現(xiàn)遞歸比對兩個目錄的文章就介紹到這了,更多相關filecmp.dircmp實現(xiàn)遞歸比對兩個目錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python利用神經(jīng)網(wǎng)絡解決非線性回歸問題實例詳解
這篇文章主要介紹了Python利用神經(jīng)網(wǎng)絡解決非線性回歸問題,結合實例形式詳細分析了Python使用神經(jīng)網(wǎng)絡解決非線性回歸問題的相關原理與實現(xiàn)技巧,需要的朋友可以參考下2019-07-07
Python直接使用plot()函數(shù)畫圖的方法實例
Python非常簡單而又非常強大,它的功能之一就是畫出漂亮的圖表,實現(xiàn)數(shù)據(jù)的可視化,下面這篇文章主要給大家介紹了關于Python直接使用plot()函數(shù)畫圖的相關資料,需要的朋友可以參考下2022-05-05
Django使用詳解:ORM 的反向查找(related_name)
今天小編就為大家分享一篇Django使用詳解:ORM 的反向查找(related_name),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令
這篇文章主要給大家介紹了關于利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令,文中還介紹了用python循環(huán)保存文件并循環(huán)讀取文件的方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11

