整理一个老程序中的素材时发现,他们把所有文件都复制了n多份,冗余太多,没法忍,想要去除一下重复的文件。
最开始利用python获取文件的大小,然后放到excel中,按大小排序,比较。
处理swf文件时,还是比较靠谱的,当处理mp3文件时,发现好多mp3文件大小一样,但是内容不一样。
最开始先按大小排序分组,然后用“BCompare.exe”手动进行二进制比对,但是当同一个组里边从在很多文件的时候,工作量就太大了(n!),700多个文件,分了58组,加了一个小时班,都没整完。
后来和同事聊了聊天,同事说可以获取文件的hash码或md5码,然后排序,进行比对。
一语惊醒梦中人,其实我也知道这种方法的,网盘上就用到了这种技术,经常见到的那种秒传,也是这么实现的。
搜到了一段python代码,几分钟就解决了。
python代码如下(3.4版本):
import hashlib import os,sys def CalcSha1(filepath): with open(filepath,'rb') as f: sha1obj = hashlib.sha1() sha1obj.update(f.read()) hash = sha1obj.hexdigest() print(hash) return hash def CalcMD5(filepath): with open(filepath,'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() print(hash) return hash f=open("list.txt") lines=f.readlines() f.close() arr=[]; for line in lines: if ".mp3" in line: line=line.replace("\n","") print(line) has=CalcSha1(line) arr.append(line+"\t"+has) fo=open("hash.txt","w") fo.write("\n".join(arr)) fo.close() input("完成,保存到hash.txt,按任意键退出...")
计算hash码和md5码的两个函数是直接从网上复制的,找不到地址了。
“list.txt”是用批处理获取的要处理的文件列表(当然可以直接俄用python来遍历文件目录,不过我还是习惯用批处理)。
获取到“hash.txt”之后,就可以放到excel中处理了。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。