首页 > 代码库 > 遍历目录删除指定MD5值的文件

遍历目录删除指定MD5值的文件

  工作需要实现一个查找出指定目录下md5值与excel表格中md5值相同的文件然后删掉的功能。我是这样做的:首先遍历指定目录,计算该目录下所有文件的md5值,以文件路径为key,md5值为value保存到一个字典中;然后读取excel表格中的md5,查看字典中的value是否包含该md5,如果包含,则删除对应文件。以下是具体实现代码:

  

 1 #coding:utf-8 2  3 from hashlib import md5 4 import os,time,sys 5 import xlrd 6 import os 7   8 md5dic = {} 9 #读取Excel表中的md5值10 def readXls(fname):11     xls = xlrd.open_workbook(fname)12     sheet_name = xls.sheet_names()13     shxrange = range(xls.nsheets)14 15     try:16         sh = xls.sheet_by_name(sheet_name[0])17     except:18         print "no sheet existed"19     #获取行数20     nrows = sh.nrows21     #获取列数22     ncols = sh.ncols23     #print "nrows %d, ncols %d" % (nrows,ncols)24     #获取第一行第一列数据 25     cell_value = http://www.mamicode.com/sh.cell_value(1,1)26     #print cell_value27      28     row_list = []29     #获取各行数据30     for i in range(1,nrows):31         row_data =http://www.mamicode.com/ sh.row_values(i)[0]32         #print row_data33         row_list.append(row_data)34     md5list = list(set(row_list))35     return md5list36 37 def calMD5(str):38   m = md5()39   m.update(str)40   return m.hexdigest() 41    42 #获取指定文件的md5值  43 def calMD5ForFile(file):44   m = md5()45   a_file = open(file, rb)46   m.update(a_file.read())47   a_file.close()48   return m.hexdigest()49  50 #获取指定目录下文件的md5值保存到字典中 51 def calMD5ForFolder(dir):52     for root, subdirs, files in os.walk(dir):53         for file in files:54             filefullpath = os.path.join(root,file)55             filerelpath = os.path.relpath(filefullpath,dir)56             md5 = calMD5ForFile(filefullpath)            57             md5dic[filefullpath] = md558     return md5dic59             60 #删除与excel表中md5值相同的文件61 def delFile(filemd5,md5dic):                62     for filefullpath in md5dic.keys():63         if md5dic[filefullpath] == filemd5:64             os.remove(filefullpath)65             print filemd5,filefullpath66 67 if __name__ == "__main__":68     if len(sys.argv) < 3:69         print "Please input the file path."70         sys.exit()71     xlsdir = sys.argv[1]72     sourceDir = sys.argv[2]73     if os.path.exists(sourceDir)==False:74         print "path not exists"75     if os.path.isdir(sourceDir)==False:76         print "not a directory"77     md5dic = calMD5ForFolder(sourceDir)78     md5list = readXls(xlsdir)79     for i in md5list:80         delFile(i,md5dic)

 

遍历目录删除指定MD5值的文件