python文件去重之递归去重-升级版

# -*- coding:utf-8 -*-

'''
CopyRight:@wjws
功能:
1. 递归扫描到所有的文件和文件夹
2. 读取扫描到的文件的MD5
3. 删除MD5相同的文件
4. 删除空的文件夹,递归删除,直到没有空文件夹为止
5. 记录删除的文件和文件夹的名称和路径
6. 自动跳过GBK错误的文件
'''
 
import os
import hashlib
import time
import sys
 
 
# 搞到文件的MD5
def get_ms5(filename):
    m = hashlib.md5()
    mfile = open(filename, "rb")
    m.update(mfile.read())
    mfile.close()
    md5_value = m.hexdigest()
    return md5_value
 
# 搞到文件的列表
def get_recursion_file(path):
    recursion_list = []
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            recursion_list.append(os.path.join(dirpath, filename))
            try:
                print(filename)
            except:
                pass
    return recursion_list
 
 
def get_urllist(base):
    list = get_recursion_file(base)
    return list

def del_empty_dir(path):
    cnt = 0
    for dirpath, dirnames, filenames in os.walk(path):
        if not os.listdir(dirpath):
            os.rmdir(dirpath)
            cnt+=1
            try:
                print("删除文件夹"+dirpath)
                with open("log_Del.txt", "a") as f:
                    f.write("删除文件夹"+dirpath)
                    f.write("\r\n")
            except:
                pass
        else:
            pass	
    return cnt

# 主函数
if __name__ == '__main__':
    md5list = []
    base = r'D:\backup'
    urllist = get_urllist(base)
    print("test1")
    for a in urllist:
        md5 = get_ms5(a)
        if (md5 in md5list):
            os.remove(a)
            try:
                print("重复:"+a)
                with open("log_Del.txt", "a") as f:
                    f.write("重复:"+a)
                    f.write("\r\n")
            except:
                pass
        else:
            md5list.append(md5)
    while(del_empty_dir(base)):
        pass

 

发布了64 篇原创文章 · 获赞 55 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览