這篇帖子我最先發表在CSDN上,鏈接 https://blog.csdn.net/zlllg/article/details/82155541
小擼了把Python,這個果然是世界上最好用的語言
平日里一來無聊,二來手巧,果然下載了好多無(luan)比(qi)珍(ba)貴(zao)的資料,搞得我小小的硬盤(已經擴到6T了)捉襟見肘,
有次無意間,發現有兩個居然長得一毛一樣,在房子這么小的情況下,我怎能忍兩個一毛一樣的東西不要臉皮的躺在我的硬盤里,果斷搞掉一個,整理一下,本來想文件名一樣的就保留一份,但問題出現了,居然有名字一樣,內容卻完全不一樣的文件,想我背朝黃土面朝天吹着空調吃着西瓜下載下來的東西,刪除是不可能的,這輩子都是不可能刪除的。可是我也又不能把這數以億計的文件挨個打開看看里面一樣不一樣吧,這個工程我大概夠我做了好久好久了,有沒有辦法搞個軟件幫幫我呢,答案是肯定的,要不然我也不用在這里寫這個博客了(應該是苦逼的一個一個打開比較吧),說正題,Python提供了一個比較文件內容的東西,那就是。。。。。。。。。。哈希算法
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4算法。
說了這么長,總結出來就一句,這玩意就是文件的指紋,幾乎每個文件是唯一的(碰到重復的,恭喜你,可以去買彩票了),那我們就把這個指紋拿出來,一個一個比對,肯定不能會有漏網的文件,既不會錯殺三千,也不使一文件漏網,原理上通了,那么我們就要去搞個代碼來幫我完成這個工作,作為最好用的語言,Python就這樣被我翻了牌子
代碼如下
# -*- coding:utf-8 -*- import os import hashlib import time import sys #搞到文件的MD5 def get_ms5(filename): m = hashlib.md5() mfile = open(filename , "rb") m.update(mfile.read()) mfile.close() md5_value = m.hexdigest() return md5_value #搞到文件的列表 def get_urllist(): base = ("D:\\lwj\\spider\\pic\\")#這里就是你要清繳的文件們了 list = os.listdir(base) urllist = [] for i in list: url = base + i urllist.append(url) return urllist #主函數 if __name__ == '__main__': md5list = [] urllist = get_urllist() print("test1") for a in urllist: md5 = get_ms5(a) if(md5 in md5list): os.remove(a) print("重復:%s" % a) else: md5list.append(md5) print("一共%s張照片" % len(md5list))
效果
這戰斗力杠杠的,啥叫科技改變生活,此之謂也