Python实现检测文件的MD5值来查找重复文件案例

平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的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值来查找重复文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python3 常见解密加密算法实例分析【base64、MD5等】

    本文实例讲述了python3 常见解密加密算法.分享给大家供大家参考,具体如下: 一.使用base64 Base64编码,64指A-Z.a-z.0-9.+和/这64个字符,还有"="号不属于编码字符,而是填充字符. 优点:方法简单 缺点:不保险,别人拿到密文可以自己解密出明文 编码原理:将3个字节转换成4个字节((3 X 8)=24=(4X6)),先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了. 解码原理:将4个字节转换成3个字节,先读入4个6位(用或

  • Python实现检测文件的MD5值来查找重复文件案例

    平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的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

  • python 计算文件的md5值实例

    较小文件处理方法: import hashlib import os 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() re

  • 用python计算文件的MD5值

    md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等.下面讲解在python中如何使用md5算法. 一.计算字符串的md5值 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import hashlib reload(sys) sys.setdefaultencoding('utf-8') if __name__ == '__m

  • PHP获取文件的MD5值并判断是否被修改的例子

    由于需要判断上传的文件是否被修改过,需要记录上传文件的md5值,这里记录一下获取文件md5值的方法. 复制代码 代码如下: if(isset($_FILES['multimedia']) && $_FILES['multimedia']['error']==0) {  $file_name = $_FILES['multimedia']['name'];  $size = getimagesize($_FILES['multimedia']['tmp_name']);     $type

  • php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中

    php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中 实例代码: <?php /** * @author Administrator * */ class TestGenerate { public static $appFolder = ""; public static $ignoreFilePaths = array ( "xxxx/xxx.php" ); public static function start() { $AppPath =

  • PHP获取远程http或ftp文件的md5值的方法

    PHP获取本地文件的md5值: md5_file("/path/to/file.png"); PHP获取远程http文件的md5值: md5_file("https://www.baidu.com/s?wd=%E4%BB%8A%E6%97%A5%E6%96%B0%E9%B2%9C%E4%BA%8B&tn=SE_Pclogo_6ysd4c7a&sa=ire_dl_gh_logo&rsv_dl=igh_logo_pc") PHP获取远程ftp文件

  • fdupe 查找重复文件的Perl脚本代码

    图: 复制代码 代码如下: #!/usr/bin/perl## fdupe tool - finding duplicate files## $Id: fdupe,v 1.7 2011/10/14 20:11:21 root Exp root $## Source code Copyright (c) 1998,2011 Bernhard Schneider.# May be used only for non-commercial purposes with# appropriate ackn

  • C#读取文件MD5值的实现代码

    本文介绍一个C#函数,可以实现计算文件的MD5值,可以用于文件传输后进行有效性校验. 我们知道可以通过将一个字符串进行散列(Hash)运算得到一个32位字符串,将其作为密码来保存是最常见的MD5应用.不知道大家有没有注意到,在网上一些下载文件的地方,旁边注明了MD5校验值,也是一个32位十六制字符串.这个字符串怎么用呢?这就是文件的MD5加密. 当我们将一个文件从网上下载之后 ,可以计算一下文件的MD5值,然后和网上公布的MD5值进行对比.结果一致,表示文件没有问题,如果结果不一致,有两种可能,

  • Python实现检测文件MD5值的方法示例

    本文实例讲述了Python实现检测文件MD5值的方法.分享给大家供大家参考,具体如下: 前面介绍过Python计算文件md5值的方法,这里分析一下Python检测文件MD5值的另一种实现方法. 概述: MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. 实现代码: #python 检测文件MD5值 #python version 2.6 import hashlib im

  • Python简单计算文件MD5值的方法示例

    本文实例讲述了Python简单计算文件MD5值的方法.分享给大家供大家参考,具体如下: 一 代码 import sys import hashlib import os.path filename = sys.argv[1] if os.path.isfile(filename): fp=open(filename,'rb') contents=fp.read() fp.close() print(hashlib.md5(contents).hexdigest()) else: print('f

随机推荐