获取文件md5值去重


  1. 修改文件名/文件修改时间/文件类型都无法改变其md5值
  2. 对其同路径下所有文件以及文件夹中文件进行去重。
  3. 通过字典去重
# -*- coding: utf-8 -*-
import os,sys,hashlib
import os.path
paths=[]
md5_paths=[]
dict={}
#path=os.getcwd()
# 获取文件所在文件夹的路径
path=sys.path[0]
# 文件名
#print(__file__)

def get_md5_01(file_path):
  md5 = None
  if os.path.isfile(file_path):
    f = open(file_path,'rb')
    md5_obj = hashlib.md5()
    md5_obj.update(f.read())
    hash_code = md5_obj.hexdigest()
    f.close()
    md5 = str(hash_code).lower()
  return md5

def files_traverse(path):
#os.walk这个函数会遍历本文件还有!子文件!中的所有文件夹还有文件
#parent是文件所在文件夹的路径,dirnames是文件夹迭代器,filenames是文件迭代器
    for parent,dirnames,filenames in os.walk(path):    
        #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
        for dirname in dirnames:
        #dirname输出所有文件夹含子文件夹的信息
            print("Folder is:"+parent+"\\"+dirname)
        #print("parent is:"+parent)
            print("****************************************")
        for filename in filenames:
        #filename输出文件夹还有子文件夹中所有文件信息
            p=parent+"\\"+filename
            paths.append(p)
            md5_value=get_md5_01(p)

            # 打印 md5值
            print(md5_value)
            md5_paths.append(md5_value)

            #输出文件路径信息
            print("Path:"+p) 
            #print("****************************************")
            if(md5_value not in dict.keys()):
                dict[md5_value]=p
            else:
                print("Delete:  ",p)
                # 清除该文件
                os.remove(p)
            print()
files_traverse(path)

你可能感兴趣的:(获取文件md5值去重)