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随机生成一个6位的验证码代码分享
Mar 24 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
django创建简单的页面响应实例教程
Sep 06 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
Django跨域请求原理及实现代码
Nov 14 Python
python中zip()函数遍历多个列表方法
Feb 18 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中将网页导出为Word文档的代码
2012/05/25 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHPMailer发送邮件
2016/12/28 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python 统计字数的思路详解
2018/05/08 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
python Tkinter的图片刷新实例
2019/06/14 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
离婚协议书范本及离婚须知
2014/10/15 职场文书
信访稳定工作汇报
2014/10/27 职场文书
晚会开场白和结束语
2015/05/29 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
教师教育心得体会
2016/01/19 职场文书
python 三边测量定位的实现代码
2021/04/22 Python