平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的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 已经可以使用,但是 我该如何忘记上传的副本并使用现有文件呢? 请注意,我想 保留现有的文件 ,并
问题内容: 我正在尝试查找文件中出现的单词数。我有一个文本文件(),文件内容如下: 我期望的结果是: 我使用的代码是: 我得到的结果是: 谁能帮帮我吗?提前致谢 。 问题答案: 使用计数器的方法。例: 输出: