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实现二分法算法实例
Feb 02 Python
Django中使用group_by的方法
May 26 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python3中exp()函数用法分析
Feb 19 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
Python类和实例的属性机制原理详解
Mar 21 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
Python实现播放和录制声音的功能
Aug 12 Python
python 如何用terminal输入参数
May 25 Python
python双向链表实例详解
May 25 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转成EXE文件
2006/10/09 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
python实现静态服务器
2019/09/05 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
运动会通讯稿200字
2014/02/16 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
益达广告词
2014/03/14 职场文书
中药专业自荐信范文
2014/03/18 职场文书
《金子》教学反思
2014/04/13 职场文书
电工技术比武方案
2014/05/11 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python