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

 #coding:utf-8

 from hashlib import md5
import os,time,sys
import xlrd
import os md5dic = {}
#读取Excel表中的md5值
def readXls(fname):
xls = xlrd.open_workbook(fname)
sheet_name = xls.sheet_names()
shxrange = range(xls.nsheets) try:
sh = xls.sheet_by_name(sheet_name[0])
except:
print "no sheet existed"
#获取行数
nrows = sh.nrows
#获取列数
ncols = sh.ncols
#print "nrows %d, ncols %d" % (nrows,ncols)
#获取第一行第一列数据
cell_value = sh.cell_value(1,1)
#print cell_value row_list = []
#获取各行数据
for i in range(1,nrows):
row_data = sh.row_values(i)[0]
#print row_data
row_list.append(row_data)
md5list = list(set(row_list))
return md5list def calMD5(str):
m = md5()
m.update(str)
return m.hexdigest() #获取指定文件的md5值
def calMD5ForFile(file):
m = md5()
a_file = open(file, 'rb')
m.update(a_file.read())
a_file.close()
return m.hexdigest() #获取指定目录下文件的md5值保存到字典中
def calMD5ForFolder(dir):
for root, subdirs, files in os.walk(dir):
for file in files:
filefullpath = os.path.join(root,file)
filerelpath = os.path.relpath(filefullpath,dir)
md5 = calMD5ForFile(filefullpath)
md5dic[filefullpath] = md5
return md5dic #删除与excel表中md5值相同的文件
def delFile(filemd5,md5dic):
for filefullpath in md5dic.keys():
if md5dic[filefullpath] == filemd5:
os.remove(filefullpath)
print filemd5,filefullpath if __name__ == "__main__":
if len(sys.argv) < 3:
print "Please input the file path."
sys.exit()
xlsdir = sys.argv[1]
sourceDir = sys.argv[2]
if os.path.exists(sourceDir)==False:
print "path not exists"
if os.path.isdir(sourceDir)==False:
print "not a directory"
md5dic = calMD5ForFolder(sourceDir)
md5list = readXls(xlsdir)
for i in md5list:
delFile(i,md5dic)

  不足之处:在进行目录遍历,计算文件md5的时候花费的时间比较多。如果能利用多线程,就可以大大提高效率。

最新文章

  1. HDFS Federation (读书笔记)
  2. 前端开发week3
  3. Junit4断言
  4. 最终排名 sdut 2446
  5. Spring MVC小结
  6. hdu 4710 Balls Rearrangement (数学思维)
  7. 基于线程池的多线程售票demo2.0(原创)
  8. zookeeper源码 — 一、单机启动
  9. Java 重建二叉树 根据前序中序重建二叉树
  10. C++——STL内存清除
  11. 1.PHP连接mysql
  12. Java框架spring 学习笔记(十三):log4j介绍
  13. CSS自定义样式
  14. loadrunner&#160;运行场景-Controller及Load&#160;Generators宿主主机优化
  15. Python Scrapy安装
  16. cxf、struts、spring中web.xml过滤url问题解决方案
  17. P1771 方程的解_NOI导刊2010提高(01)
  18. Django-models进阶
  19. FPGA的过去,现在和未来
  20. andorid关于selector更换图片失效

热门文章

  1. 活字格Web应用平台学习笔记 7 - 导出 Excel
  2. SQLServer&#160;SQL连接查询深度探险(摘录
  3. Django 处理modelform错误信息
  4. HDFS ErasureCode方案对比
  5. jboss4.2.3 屏蔽响应头server信息
  6. 美团SQL优化工具SQLAdvisor
  7. 【转】HTTP学习---Web 缓存
  8. 【转】Mysql学习---SQL的优化
  9. List集合的特有功能
  10. 系统升级win7 sp1后,ado,MSJRO.tlh error 问题