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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python爬取读者并制作成PDF
Mar 10 Python
python清除字符串里非数字字符的方法
Jul 02 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
tensorflow实现简单的卷积网络
May 24 Python
Python学习笔记之For循环用法详解
Aug 14 Python
pytest中文文档之编写断言
Sep 12 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
django 实现简单的插入视频
Apr 07 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
Python私有属性私有方法应用实例解析
Sep 15 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
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
用python发送微信消息
2020/12/21 Python
python中的unittest框架实例详解
2021/02/05 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
省优秀教师事迹材料
2014/01/30 职场文书
党课培训主持词
2014/04/01 职场文书
丧事主持词大全
2014/04/02 职场文书
出售房屋委托书范本
2014/09/24 职场文书
罚款通知怎么写
2015/04/22 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
Python OpenCV超详细讲解基本功能
2022/04/02 Python
mysql查找连续出现n次以上的数字
2022/05/11 MySQL