zoukankan      html  css  js  c++  java
  • 遍历目录删除指定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.nrows
    21     #获取列数
    22     ncols = sh.ncols
    23     #print "nrows %d, ncols %d" % (nrows,ncols)
    24     #获取第一行第一列数据 
    25     cell_value = sh.cell_value(1,1)
    26     #print cell_value
    27      
    28     row_list = []
    29     #获取各行数据
    30     for i in range(1,nrows):
    31         row_data = sh.row_values(i)[0]
    32         #print row_data
    33         row_list.append(row_data)
    34     md5list = list(set(row_list))
    35     return md5list
    36 
    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] = md5
    58     return md5dic
    59             
    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,filefullpath
    66 
    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的时候花费的时间比较多。如果能利用多线程,就可以大大提高效率。

  • 相关阅读:
    页面进度条插件pace.js
    cropper.js头像剪裁
    数组每一项与之前项累加
    css实现波浪纹,水波纹动画
    在echart的map上把symbol替换成gif通过convertToPixel坐标转换成px定位到页面,没有做echart的缩放情况下
    vue折叠面板的收缩动画效果,实现点击按钮展开和收起,并有个高度过渡的动画效果
    vue项目中应用自定义的字体
    vue中监听滚动条事件,通过事件控制其他div滚动,固定表头和列
    好久没写博客了
    在nuxt中使用富文本编辑器quill
  • 原文地址:https://www.cnblogs.com/goodhacker/p/4124804.html
Copyright © 2011-2022 走看看