- 修改文件名/文件修改时间/文件类型都无法改变其md5值
- 对其同路径下所有文件以及文件夹中文件进行去重。
- 通过字典去重
# -*- 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)