python去重

import os,hashlib,time,tkinter
from tkinter.filedialog import askdirectory



st = time.perf_counter()
def get_md5(filename):
##    print('get_md5 called')多次调用MD5
    m=hashlib.md5()
    mfile=open(filename,'rb')
    m.update(mfile.read())
    mfile.close()
    md5_value = m.hexdigest()
    return md5_value


def get_dir(path):
    print('get_dir called')
    dirlt = []
    lt = os.listdir(path)
    for i in lt:
        if os.path.isdir(path+i):
            lt1 = os.listdir(path+i+'/')
            for ii in lt1:
                dirlt += [path+i+'/'+ii]
    return dirlt

if __name__ == '__main__':
    r = tkinter.Tk()
    path = askdirectory()
##    path = eval(input("输入路径:"))
    path = path+'//'
    print(path)
    exname = input("删除文件扩展名:")
    p=0
    p1=0
    md5dt = {}
    dirlt = get_dir(path)
    for i in dirlt:
        md5 = get_md5(i)
        if md5 in md5dt:
            md5dt[md5] = [md5dt.get(md5),'{}'.format(i)]
            #字典值的修改方式^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##            print(md5dt[md5])
            #为什么不用print打印不出来 ??????????????????
################################################################            
##            print(i.split('.')[1])
            if i.split('.')[1] == exname:
                
##                os.remove(i)
                p1 += 1
                print(i+'已经删除!!!')
                print('\n')
        else:
            md5dt.update({md5:i})
            #list('md5')->['m','d','5']
            #用['md5']->['md5']
            p += 1
    
    for i in md5dt:
        if isinstance(md5dt[i],list):
            print(md5dt[i])
            
            
    print('一共有{}个文件'.format(p))
    print('一共有{}个重复文件'.format(p1))
    print('共用{:.2f}秒'.format(time.perf_counter()-st))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。