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 Pandas 读取txt表格的实例
Apr 29 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
python实现可视化动态CPU性能监控
Jun 21 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python 求数组局部最大值的实例
Nov 26 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
python学习之panda数据分析核心支持库
May 07 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_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python获取标准北京时间的方法
2015/03/24 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
python组合无重复三位数的实例
2018/11/13 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
幼儿园家长寄语
2014/04/02 职场文书
初婚未育证明样本
2014/10/24 职场文书
2015年复活节活动总结
2015/02/27 职场文书
初中团支书竞选稿
2015/11/21 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers