如果你有几百个文件,并希望删除重复的文件(只保留一个副本),可以通过计算每个文件的MD5值来判断哪些文件是重复的,然后删除重复文件。以下是一个Python脚本示例,用于处理这种情况:
Python脚本实现
import hashlib
import os
from collections import defaultdict
def calculate_md5(file_path):
"""计算文件的MD5值"""
md5_hash = hashlib.md5()
try:
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
md5_hash.update(chunk)
return md5_hash.hexdigest()
except FileNotFoundError:
print(f"文件 {file_path} 未找到!")
return None
except Exception as e:
print(f"读取文件 {file_path} 时出错:{e}")
return None
def remove_duplicate_files(directory):
"""删除目录中的重复文件,只保留一个副本"""
# 用于存储MD5值和对应的文件路径
md5_dict = defaultdict(list)
# 遍历目录中的所有文件
for root, _, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
md5_value = calculate_md5(file_path)
if md5_value:
md5_dict[md5_value].append(file_path)
# 删除重复文件,只保留一个副本
for md5_value, file_paths in md5_dict.items():
if len(file_paths) > 1: # 如果有重复文件
print(f"找到重复文件,MD5: {md5_value}")
for file_path in file_paths[1:]: # 保留第一个文件,删除其余文件
print(f"删除重复文件: {file_path}")
os.remove(file_path)
print("重复文件处理完成!")
# 示例用法
directory = "path/to/your/files" # 替换为你的文件目录路径
remove_duplicate_files(directory)
脚本说明:
- calculate_md5函数:计算单个文件的MD5值。
- remove_duplicate_files函数:
- 遍历指定目录及其子目录中的所有文件。
- 使用
defaultdict
存储每个文件的MD5值和对应的文件路径。 - 如果某个MD5值对应多个文件路径,说明这些文件是重复的。
- 保留第一个文件,删除其余重复文件。
- 错误处理:脚本会跳过无法读取的文件,并输出错误信息。
- 安全性:在删除文件之前,脚本会打印出要删除的文件路径,方便用户确认。
使用方法:
- 将
directory
变量设置为包含文件的目录路径。 - 运行脚本后,它会自动检测并删除重复文件,只保留一个副本。
注意事项:
- 备份重要文件:在运行脚本之前,建议备份重要文件,以防误删。
- 文件类型:此脚本适用于所有类型的文件,不仅仅是Word文档。
- 性能优化:如果文件数量非常多,计算MD5可能会花费一些时间,但分块读取的方式可以避免内存问题。
运行脚本后,重复的文件将被删除,只保留一个副本。