Python 找出重复文件:自动清理占空间的大文件
import os
import hashlib
from collections import defaultdict
def file_hash(path, chunk=8192):
h = hashlib.md5()
with open(path, 'rb') as f:
while True:
data = f.read(chunk)
if not data:
break
h.update(data)
return h.hexdigest()
def find_duplicates(folder):
sizes = defaultdict(list)
for root, _, files in os.walk(folder):
for name in files:
path = os.path.join(root, name)
try:
sizes[os.path.getsize(path)].append(path)
except OSError:
pass
dup_groups = []
for size, paths in sizes.items():
if len(paths) < 2:
continue
hashes = defaultdict(list)
for p in paths:
hashes[file_hash(p)].append(p)
for h, same in hashes.items():
if len(same) > 1:
dup_groups.append(same)
for group in dup_groups:
print("重复文件:")
for f in group:
print(" ", f)
print(f"共发现 {len(dup_groups)} 组重复")
find_duplicates('D:/Downloads')
import hashlib
from collections import defaultdict
def file_hash(path, chunk=8192):
h = hashlib.md5()
with open(path, 'rb') as f:
while True:
data = f.read(chunk)
if not data:
break
h.update(data)
return h.hexdigest()
def find_duplicates(folder):
sizes = defaultdict(list)
for root, _, files in os.walk(folder):
for name in files:
path = os.path.join(root, name)
try:
sizes[os.path.getsize(path)].append(path)
except OSError:
pass
dup_groups = []
for size, paths in sizes.items():
if len(paths) < 2:
continue
hashes = defaultdict(list)
for p in paths:
hashes[file_hash(p)].append(p)
for h, same in hashes.items():
if len(same) > 1:
dup_groups.append(same)
for group in dup_groups:
print("重复文件:")
for f in group:
print(" ", f)
print(f"共发现 {len(dup_groups)} 组重复")
find_duplicates('D:/Downloads')

更新时间:2026-09-14 13:42:08