当前位置: 首页 > 编程笔记 >

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

张姚石
2023-03-14
本文向大家介绍Python实现检测文件的MD5值来查找重复文件案例,包括了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值来查找重复文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 我想找到“cost”tag=505.921435631349的元素的路径,我尝试过这样做,我总是有空值,这是我做过的一件事,它或多或少给了我想要的东西,它工作不正常,我将在java中使用这个路径来获得包含特定值的cost tag下面的值 我的xpath请注意,此xml文件是动态的 xml文件

  • 本文向大家介绍C#读取文件MD5值的实现代码,包括了C#读取文件MD5值的实现代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍一个C#函数,可以实现计算文件的MD5值,可以用于文件传输后进行有效性校验。 我们知道可以通过将一个字符串进行散列(Hash)运算得到一个32位字符串,将其作为密码来保存是最常见的MD5应用。不知道大家有没有注意到,在网上一些下载文件的地方,旁边注明了MD5校验值,也

  • 好吧,我知道标题真的很模糊,但我无法思考如何说出我的问题,因此我无法谷歌它;这就是我问你们的原因 基本上,我有一个接受文件输入的构造函数,并根据文件名(在我的示例中,我们使用file.txt或employees.txt)对其进行处理。现在,我不知道这是否是一个好主意,或者是否有其他方法可以实现多个重复构造函数。这是我到目前为止的代码,感谢您的帮助!:

  • 问题内容: 我知道以前已经问过这个问题,并且已经看到了一些答案,但是这个问题更多地是关于我的代码和完成此任务的最佳方法。 我想扫描一个目录,并查看该目录中是否存在任何重复项(通过检查MD5哈希值)。以下是我的代码: 这给了我以下输出: 我的想法是: 1)扫描目录2)将MD5哈希+文件名写入文本文件3)以只读方式打开文本文件4)再次扫描目录并检查文本文件… 我看到这不是一个好方法,而且行不通。“匹配

  • 问题内容: 我有一个带有的模型,其中包含用户上传的文件。由于我想节省空间,因此我想避免重复。 我想要达到的目标: 计算 上传文件的 md5校验和 使用 基于其md5sum* 的 文件名 存储文件 * 如果已经存在具有该名称的文件(新文件是 重复的 文件),则 丢弃上传的文件并改用现有文件 1 和 2 已经可以使用,但是 我该如何忘记上传的副本并使用现有文件呢? 请注意,我想 保留现有的文件 ,并

  • 问题内容: 我正在尝试查找文件中出现的单词数。我有一个文本文件(),文件内容如下: 我期望的结果是: 我使用的代码是: 我得到的结果是: 谁能帮帮我吗?提前致谢 。 问题答案: 使用计数器的方法。例: 输出: