美文网首页
如何md5校验删除硬盘下的重复文件

如何md5校验删除硬盘下的重复文件

作者: 我本来是个美术 | 来源:发表于2019-02-22 11:26 被阅读0次
# !/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校验删除硬盘下的重复文件

      本文链接:https://www.haomeiwen.com/subject/wmwsyqtx.html