# !/usr/bin/python
# -*- coding:utf-8 -*-
import os.path
import hashlib
import pandas as pd
from collections import Counter
dir_path = r'**************' # 有重复文件的文件夹路径
file_list = [] # 文件路径存放
md5s_list = [] # 文件md5存放
for parent, dirnames, filenames in os.walk(dir_path):
for fnames in filenames:
path = parent + '/' + fnames
mfile = open(path, 'rb')
m = hashlib.md5()
m.update(mfile.read())
mfile.close()
md5_value = m.hexdigest()
file_list.append(path)
md5s_list.append(md5_value)
list_data = pd.DataFrame({'0': file_list, '1': md5s_list}).values.tolist()
list_data_dict = pd.DataFrame({'0': file_list, '1': md5s_list}).values.tolist()
distinct_md5 = [str(k) for k, v in dict(Counter(md5s_list)).items() if v > 1] # 文件md5去重结果
print('不重复文件md5:%s' % distinct_md5)
print('---------------------------------------')
todeleteno = 0 # 统计删除总数
for l in distinct_md5: # 遍历重复md5列表
n = 0 # 计数,同一个名称内一次计数,计数为0不删除,自增后不为0则删除
for k, v in dict(list_data_dict).items(): # 遍历 全路径、文件名称 字典
if l == v: # 当字典value(md5)等于重复md5中字符
if n == 0: # 计数为0不删除
print('不删:{v}-----{k}'.format(v=v, k=k))
else: # 自增后不为0则删除
todeleteno += 1
print('删除{n}:{v}-----{k}'.format(n=str(todeleteno).zfill(5), v=v, k=k))
os.remove(k) # 慎用删除,没事就注释掉
n += 1
print('---------------------------------------')
print("删除总数:" + str(todeleteno))
如何md5校验删除硬盘下的重复文件
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...