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 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
python中append实例用法总结
Jul 30 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Django设置Postgresql的操作
May 14 Python
Python解析微信dat文件的方法
Nov 30 Python
使用python实现学生信息管理系统
Feb 25 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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
DC动漫人物排行
2020/03/03 欧美动漫
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
JavaScript的Cookies
2008/01/16 Javascript
DOM 基本方法
2009/07/18 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
python关闭windows进程的方法
2015/04/18 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python集合常见运算案例解析
2019/10/17 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
Python for循环及基础用法详解
2019/11/08 Python
python多进程使用函数封装实例
2020/05/02 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
技术经理的自我评价范文
2013/12/03 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
欢迎横幅标语
2014/06/17 职场文书
学雷锋宣传标语
2014/06/25 职场文书
商务经理岗位职责
2014/07/30 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
秋季运动会加油词
2015/07/18 职场文书
升学宴来宾致辞
2015/07/27 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
MySQL 数据类型详情
2021/11/11 MySQL