亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Python 查找和刪除重復文件

使用 Python 查找和刪除重復文件

慕容森 2021-11-02 18:57:05
我有幾個文件夾,其中包含名稱略有不同的重復文件(例如 file_abc.jpg、file_abc(1).jpg)或末尾帶有“(1) 的后綴。我正在嘗試開發一種相對簡單的搜索方法通過文件夾,找出重復項,然后刪除它們。重復項的標準是文件末尾的“(1)”,只要原始文件還存在即可。我可以識別重復項,但是我無法以正確的格式創建文本字符串以刪除它們。它需要是"C:\Data\temp\file_abc(1).jpg",但是使用下面的代碼我最終得到r"C:\Data\temp''file_abc(1).jpg".我查看了答案 [查找重復文件并刪除它們,但這似乎比我需要的要復雜得多。如果有更好(+簡單)的方法來做到這一點,那么我會告訴我,但是我在 50 個奇數文件夾中總共只有大約 10,000 個文件,因此沒有大量數據需要處理。到目前為止我的代碼是:import osfile_path = r"C:\Data\temp"file_list = os.listdir(file_path)print (file_list)for file in file_list:    if ("(1)" in file):    index_no = file_list.index(file)    print("!! Duplicate file, number in list: "+str(file_list.index(file)))    file_remove = ('r"%s' %file_path+"'\'"+file+'"')    print ("The text string is: " + file_remove)    os.remove(file_remove)
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

您的代碼只是比必要的復雜一點,并且您沒有應用正確的方法從路徑和文件名中創建文件路徑。而且我認為您不應該刪除沒有原始文件的文件(即雖然名稱看起來像但不重復的文件)。


嘗試這個:


for file_name in file_list:

    if "(1)" not in file_name:

        continue

    original_file_name = file_name.replace('(1)', '')

    if not os.path.exists(os.path.join(file_path, original_file_name):

        continue  # do not remove files which have no original

    os.remove(os.path.join(file_path, file_name))

但是請注意,這對于其中多次出現的文件不能正常工作(1),并且(2)根本不會處理具有或更高數字的文件。所以我真正的提議是這樣的:

  • 在給定開始下方的整個目錄樹中列出所有文件(用于os.walk()獲取此信息),然后

  • 按大小對所有文件進行排序,然后

  • 線性遍歷此列表,識別雙打(此列表中的鄰居)和

  • 產生每個這樣的雙組(即一個小的文件列表(通常只有兩個),它們是相同的)。

當然,您應該檢查這幾個文件的內容,然后確保其中的兩個文件大小相同而不相同。如果您確定您有一組相同的名稱,請刪除除名稱最簡單的名稱以外的所有名稱(例如,沒有后綴(1)等)。


順便說一下,我會調用file_path類似dir_pathor的東西root_dir_path(因為它是一個目錄和一個完整的路徑)。


查看完整回答
反對 回復 2021-11-02
  • 1 回答
  • 0 關注
  • 297 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號