10行Python程式碼自動清理電腦內重複檔案,解放雙手!

huang5333發表於2020-11-04

大家好,又到了Python辦公自動化系列。

今天分享一個系統層面的自動化案例:

**很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!

小編整理了一些Python學習內容,我把它推薦給你!Python資料+Qun  69286 - 7294 就能獲得全部資料!免費學習視訊+專案原始碼,並且在學習的過程中,還可以參與我們的訓練營學習!

「給定一個資料夾,使用Python檢查給定資料夾下有無檔案重複,若存在重複則刪除」

主要涉及的知識點有:

  • os 模組綜合應用

  • glob 模組綜合應用

  • 利用 filecmp 模組比較兩個檔案

步驟分析

該程式實現的邏輯可以具化為:

遍歷獲取給定資料夾下的所有檔案,然後通過巢狀迴圈兩兩比較檔案是否相同,如果相同則刪除後者。

實現問題的關鍵就變成了:point_down:

如何判斷兩個檔案是否相同?

在這裡我們可以使用 filecmp 模組,來看看官方的介紹文件:

  • filecmp.cmp(f1, f2, shallow=True)

  • 比較名為f1和f2的檔案,如果它們似乎相等則返回 True ,否則返回 False

  • 如果 shallow 為真,那麼具有相同 os.stat() 簽名的檔案將會被認為是相等的。否則,將比較檔案的內容。

所以可以這樣使用:point_down:

解決了這個問題,我們就可以開始寫程式碼了!

Python實現

匯入需要的庫並設定目標資料夾路徑

接著遍歷獲取所有檔案的 絕對路徑 ,我們可以利用 glob 模組的萬用字元結合 recursive 引數即可完成,框架如下:

由於遍歷獲取每一個檔案或者資料夾後,需要判斷是否是檔案,如果是檔案則可能將絕對路徑存放到列表中,這裡需要再完成兩個事情:

  1. 首先建立一個空列表,後面用 list.append(i) 新增檔案路徑

  2. 接著利用 os.path.isfile(i) 判斷是否是檔案,返回 True 則執行新增元素的操作

具體程式碼如下

上一步我們獲取了目標資料夾下的所有檔案路徑,接下來就可以巢狀遍歷這個路徑列表,其中 filecmp.cmp 進行檔案判斷, os.remove 進行檔案刪除

這裡的程式碼已經實現了大致邏輯,但有一個細節需要考慮到:有可能迴圈到檔案已經被前面的判斷刪除了,導致 os.remove(file) 由於檔案不存在而報錯

因此,可以用 os.path.exists 對檔案存在進行判斷,如下所示:

這樣,一個簡易的檔案去重小程式就完成了,完整程式碼如下:

寫在最後

通過本文的Python自動化指令碼製作過程,我們可以再次體會Python辦公自動化的強大。

相關文章