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吧~~