本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于騰訊云 作者:Python進階者
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料, )
前言
大家好,又到了Python辦公自動化系列,
今天分享一個系統層面的自動化案例:
「給定一個檔案夾,使用Python檢查給定檔案夾下有無檔案重復,若存在重復則洗掉」
# 假設x和y兩個檔案是相同的 print(filecmp.cmp(x, y)) # True
解決了這個問題,我們就可以開始寫代碼了!
Python實作
匯入需要的庫并設定目標檔案夾路徑
import os import glob import filecmp dir_path = r'C:\\xxxx'
接著遍歷獲取所有檔案的絕對路徑,我們可以利用glob模塊的通配符結合recursive引數即可完成,框架如下:
for file in glob.glob(path + '/**/*', recursive=True): pass
由于遍歷獲取每一個檔案或者檔案夾后,需要判斷是否是檔案,如果是檔案則可能將絕對路徑存放到串列中,這里需要再完成兩個事情:
具體代碼如下
file_lst = [] for i in glob.glob(dir_path + '/**/*', recursive=True): if os.path.isfile(i): file_lst.append(i)
上一步我們獲取了目標檔案夾下的所有檔案路徑,接下來就可以嵌套遍歷這個路徑串列,其中filecmp.cmp進行檔案判斷,os.remove進行檔案洗掉
for x in file_lst: for y in file_lst: if x != y: if filecmp.cmp(x, y): os.remove(y)
這里的代碼已經實作了大致邏輯,但有一個細節需要考慮到:有可能回圈到檔案已經被前面的判斷洗掉了,導致os.remove(file)由于檔案不存在而報錯
因此,可以用os.path.exists對檔案存在進行判斷,如下所示:
for x in file_lst: for y in file_lst: if x != y and os.path.exists(x) and os.path.exists(y): if filecmp.cmp(x, y): os.remove(y)
這樣,一個簡易的檔案去重小程式就完成了,完整代碼如下:
import os import glob import filecmp dir_path = r'C:\xxxx' file_lst = [] for i in glob.glob(dir_path + '/**/*', recursive=True): if os.path.isfile(i): file_lst.append(i) for x in file_lst: for y in file_lst: if x != y and os.path.exists(x) and os.path.exists(y): if filecmp.cmp(x, y): os.remove(y)
寫在最后
通過本文的Python自動化腳本制作程序,我們可以再次體會Python辦公自動化的強大,同時本次實作的功能可以和之前?自動整理檔案的腳本結合使用!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234629.html
標籤:Python
