filecmp模組用於比較檔案及檔案夾的內容,它是一個輕量級的工具,使用非常簡單。python標準庫還提供了difflib模組用於比較檔案的內容。關於difflib模組,且聽下回分解。
filecmp定義了兩個函數,用於方便地比較檔案與檔案夾:
filecmp.cmp(f1, f2[, shallow]):
比較兩個檔案的內容是否匹配。參數f1, f2指定要比較的檔案的路徑。選擇性參數shallow指定比較檔案時是否需要考慮檔案本身的屬性(通過os.stat函數可以獲得檔案屬性)。如果檔案內容匹配,函數返回True,否則返回False。
filecmp.cmpfiles(dir1, dir2, common[, shallow]):
比較兩個檔案夾內指定檔案是否相等。參數dir1, dir2指定要比較的檔案夾,參數common指定要比較的檔案名稱列表。函數返回包含3個list元素的元組,分別表示匹配、不匹配以及錯誤的檔案清單。錯誤的檔案指的是不存在的檔案,或檔案被瑣定不可讀,或沒許可權讀檔案,或者由於其他原因訪問不了該檔案。
filecmp模組中定義了一個dircmp類,用於比較檔案夾,通過該類比較兩個檔案夾,可以擷取一些詳細的比較結果(如只在A檔案夾存在的檔案清單),並支援子檔案夾的遞迴比較。
dircmp提供了三個方法用於報告比較的結果:
- report():只比較指定檔案夾中的內容(檔案與檔案夾)
- report_partial_closure():比較檔案夾及第一級子檔案夾的內容
- report_full_closure():遞迴比較所有的檔案夾的內容
dircmp還提供了下面這些屬性用於擷取比較的詳細結果:
- left_list:左邊檔案夾中的檔案與資料夾清單;
- right_list:右邊檔案夾中的檔案與資料夾清單;
- common:兩邊檔案夾中都存在的檔案或檔案夾;
- left_only:只在左邊檔案夾中存在的檔案或檔案夾;
- right_only:只在右邊檔案夾中存在的檔案或檔案夾;
- common_dirs:兩邊檔案夾都存在的子檔案夾;
- common_files:兩邊檔案夾都存在的子檔案;
- common_funny:兩邊檔案夾都存在的子檔案夾;
- same_files:匹配的檔案;
- diff_files:不匹配的檔案;
- funny_files:兩邊檔案夾中都存在,但無法比較的檔案;
- subdirs:我沒看明白這個屬性的意思,python手冊中的解釋如下:A dictionary mapping names in common_dirs to dircmp objects
簡單就是美!我只要檔案比較的結果,不想去關心檔案是如何是比較的,hey,就用python吧~~