Python程序,现有A文件夹的路径 xxx,B文件夹的路径 yyy,
如果A文件夹中的文件,同时存在与B文件夹内,
判断2个文件的校验码是否相同,
如果校验码相同,且文件大于 xx MB,则删除A文件夹内的重复文件;
v2.1 可深入子文件夹进行操作;
用途:
- 本地存储有A文件夹(如在D盘),另有存储B文件夹(云盘、移动盘、备份盘等),可根据需要删除A中与B相同 md5 的文件。
- 可再根据需要加入 “文件名的后缀” 判断,以实现更多用途。
import hashlib
import os
import shutil
# 获取文件的校验码
def get_checksum(file_path):
checksum = hashlib.md5()
with open(file_path, "rb") as file:
buf = file.read()
checksum.update(buf)
return checksum.hexdigest()
# 遍历文件夹,包括子文件夹中的文件,获取dict数据
def traverse_folder(folder):
# all_files = []
dict = {}
for root, dirs, files in os.walk(folder):
for file in files:
file_path = os.path.join(root, file)
# all_files.append(file_path)
dict[file_path] = get_checksum(file_path) # dict中增加项目
return dict
# A文件夹和B文件夹的路径,自定义路径
folder_a = r"C:\Users\xxx\Documents\2022test" # 删除这个文件内的文件
folder_b = r"C:\Users\xxx\Documents\2023test"
# 调用函数,遍历A、B文件夹中的所有文件,包括子文件夹,取得dict形式
a_files_dict = traverse_folder(folder_a)
b_files_dict = traverse_folder(folder_b)
# print(b_files_dict)
# print(len(b_files_dict))
# 参考:查找字典dict中value相同的key.py
# 遍历,key,value分别为:文件、校验码
value_list = []
for key, value in a_files_dict.items():
for value in b_files_dict.values():
value_list.append(key)
volumeOfFile = float(input("请输入文件的大小(MB): "))
# 列表去重,遍历,调用os,删除文件
print("删除文件如下:")
for file in list(set(value_list)):
if os.path.getsize(file) > volumeOfFile * 1024 * 1024:
os.remove(file)
print(f" {file}")
print("\nDone.")