Python 檔案去重複:一鍵搵出重複檔案,清返幾十 GB 硬碟空間

香港人換電腦、換手機、買外置硬碟嘅速度愈來愈快,但每次搬資料,都好容易留下一大堆重複檔案:同一張相喺「相片」、「下載」、「備份」幾個資料夾各有一份;同一份合約 email 收過、WhatsApp 收過、又自己另存過一次。日子一久,硬碟就畀呢啲「同一樣嘢嘅翻版」塞到滿一滿,想清又唔知從何入手。

今次教你用 Python 寫一個「重複檔案搜尋器」:行一次,就自動掃描成個資料夾(連埋子資料夾),搵出內容完全一樣嘅檔案,列成報告,等你決定邊啲可以刪。全程唔使裝額外軟件,用 Python 內置嘅功能就做得到。

點解唔可以靠「檔名」判斷重複?

最直覺嘅做法係比較檔名,但呢個方法好唔可靠:同一張相可以叫 IMG_2031.jpg 又叫 holiday.jpg;反過嚟,兩份完全唔同嘅文件都可能叫「報價單.docx」。所以要準確判斷,一定要比較檔案內容。做法係用 hashlib 計算每個檔案嘅「指紋」(SHA-256 雜湊值)——內容一樣,指紋就一模一樣;只要相差一個位元,指紋就完全唔同。

第一步:動手之前想一想

  • 先由一個範圍開始(例如「文件」資料夾),唔好一次過掃成部機
  • 程式只負責「搵」同「報告」,唔會自動刪除,安全第一
  • 細檔案數目多,所以先用「檔案大細」篩一次、再用雜湊值確認,速度快好遠

第二步:完整程式碼

開一個新檔案 dedupe.py(記事本都得),貼入以下 code:

import os, hashlib from collections import defaultdict import pandas as pd def file_hash(path, chunk=65536): h = hashlib.sha256() with open(path, "rb") as f: while (block := f.read(chunk)): h.update(block) return h.hexdigest() SCAN_DIR = "D:/Documents" # 想掃描嘅資料夾 # 1. 先用「檔案大細」分組(快) by_size = defaultdict(list) for root, _, files in os.walk(SCAN_DIR): for name in files: p = os.path.join(root, name) try: by_size[os.path.getsize(p)].append(p) except OSError: pass # 2. 只對「大細一樣」嘅檔案算雜湊(準) by_hash = defaultdict(list) for size, paths in by_size.items(): if len(paths) < 2: continue for p in paths: try: by_hash[file_hash(p)].append(p) except OSError: continue # 3. 輸出報告 rows = [] total = 0 for h, paths in by_hash.items(): if len(paths) > 1: total += (len(paths) - 1) * os.path.getsize(paths[0]) for p in paths: rows.append({"雜湊": h[:8], "檔案": p, "大小(KB)": round(os.path.getsize(p)/1024, 1)}) pd.DataFrame(rows).to_excel("duplicates.xlsx", index=False) print(f"搵到 {len(by_hash)} 組重複,可釋放約 {total/1024/1024:.1f} MB")

逐行解釋

  • file_hash() —— 用 SHA-256 計出檔案指紋;逐塊(64KB)讀入,就算幾 GB 嘅大檔都唔會爆記憶體。
  • os.walk(SCAN_DIR) —— 自動走遍指定資料夾同所有子資料夾。
  • by_size —— 先按檔案大細分組;大細唔同就一定唔係重複,可以直接跳過,慳好多時間。
  • len(paths) < 2 → continue —— 大細獨一無二嘅檔案,唔使浪費時間算雜湊。
  • by_hash —— 用指紋做 key,同一組就係內容完全相同嘅檔案。
  • h[:8] —— 報告只顯示指紋頭 8 個字,方便肉眼對比。
  • to_excel() —— 一行一個檔案,另存成 Excel,方便你篩選、排序。

第三步:執行

python dedupe.py

跑完,同一個資料夾會多一個 duplicates.xlsx,入面列晒所有重複檔案,仲會話你知總共可以釋放幾多空間。你可以喺 Excel 排吓序,睇清楚邊個係原檔、邊個係副本,再自己決定刪邊個。

安全使用五大貼士

  • 先備份,後清理 —— 刪嘢之前,最好先將檔案清單抄低,或者做一次備份。
  • 保留最有價值嘅一份 —— 通常保留喺最就手、命名最清楚嗰個位置。
  • 唔好喺系統槽亂刪 —— Windows 同程式本身嘅檔案,唔好用呢個方法處理。
  • 留意「文件大細」一欄 —— 程式已經先篩過一次,但報告入面嘅大細欄可以幫你快速鎖定最佔位嘅大檔。
  • 定期行,唔好等爆 —— 每季掃一次,比一次過清幾百 GB 輕鬆得多。

總結

Python 教學:用幾十行 code,就砌出一個「重複檔案搜尋器」,幾秒掃完成個資料夾,幫你慳返幾 GB 甚至幾十 GB 空間。重點記住兩個次序:先用大細篩、再用雜湊值確認;同埋程式只搵唔刪,清理嘅決定權永遠喺你手上。想再進一步,你可以喺 code 尾加一段,將重複檔案自動搬去「待刪」資料夾,睇清楚冇問題先一次過清。