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用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
浅谈Python的list中的选取范围
Nov 12 Python
python添加菜单图文讲解
Jun 04 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
python scipy卷积运算的实现方法
Sep 16 Python
Python实现壁纸下载与轮换
Oct 19 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
Python MNIST手写体识别详解与试练
Nov 07 Python
python字符串的一些常见实用操作
Apr 06 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年的四部动画电影
2020/01/01 欧美动漫
层叠菜单的动态生成
2006/10/09 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
毕业生的求职信范文分享
2013/12/04 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
Spring Boot实现文件上传下载
2022/08/14 Java/Android