Python模組學習:filecmp 檔案比較

發表於2015-05-22

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

相關文章