Python实现检测文件的MD5值来查找重复文件案例


Posted in Python onMarch 12, 2020

平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的MD5值,虽然对于抄袭来说作用不大,但是聊胜于无,以后可以做一个复杂点的。

# coding: utf8

import hashlib
import os
from collections import Counter
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

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 get_md5_02(file_path):
  f = open(file_path,'rb') 
  md5_obj = hashlib.md5()
  while True:
    d = f.read(8096)
    if not d:
      break
    md5_obj.update(d)
  hash_code = md5_obj.hexdigest()
  f.close()
  md5 = str(hash_code).lower()
  return md5

if __name__ == "__main__":
  output_list=[]
  #input_path=r"e:\xx\新建文件夹"
  #output_path = unicode(input_path , "utf8")
  output_path=os.getcwd()
  g = os.walk(output_path) 
  for path,dir_list,file_list in g: 
    for file_name in file_list:
      output_list.append(os.path.join(path, file_name) )
  md5_list= [get_md5_01(i) for i in output_list]
  Counter_list=Counter(md5_list)
  for i in Counter_list.items():
    if i[1] >1:
      duplicate_list=[ a for a in range(len(md5_list)) if md5_list[a] == i[0]]
      print '-'*50
      print i[0]
      for j in duplicate_list:
        with open('duplicate.log', mode='a+') as f:
          f.write(i[0]+'\t'+output_list[j]+'\n')
        print output_list[j]

补充知识:python一句话校验文件哈希值

MD5

python -c "import hashlib,sys;print hashlib.md5(open(sys.argv[1],'rb').read()).hexdigest()" 文件名

SHA-1

python -c "import hashlib,sys;print hashlib.sha1(open(sys.argv[1],'rb').read()).hexdigest()" 文件名

SHA-256

python -c "import hashlib,sys;print hashlib.sha256(open(sys.argv[1],'rb').read()).hexdigest()" 文件名

SHA-512

python -c "import hashlib,sys;print hashlib.sha512(open(sys.argv[1],'rb').read()).hexdigest()" 文件名

以上这篇Python实现检测文件的MD5值来查找重复文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
Python多图片合并PDF的方法
Jan 03 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
Python循环实现n的全排列功能
Sep 16 Python
Python中的延迟绑定原理详解
Oct 11 Python
python函数不定长参数使用方法解析
Dec 14 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 #Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 #Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 #Python
Python 实现使用空值进行赋值 None
Mar 12 #Python
PyCharm永久激活方式(推荐)
Sep 22 #Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 #Python
pycharm激活码快速激活及使用步骤
Mar 12 #Python
You might like
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
Angularjs 基础入门
2014/12/26 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
浅谈Python NLP入门教程
2017/12/25 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
中专毕业生自荐信
2013/11/16 职场文书
股权投资意向书
2014/04/01 职场文书
在校实习生求职信
2014/06/18 职场文书
效能风暴心得体会
2014/09/04 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
房产电话营销开场白
2015/05/29 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS