使用Python查找目錄中的重複文件

是這樣的,電腦上的堆積的照片有點多,並且重複的照片被放在了不一樣的目錄,佔用的空間愈來愈大,數量也多得已經不太適合人工分辨整理,寫個Python腳原本處理吧。python

文件的惟一標識 - MD5

假如你要處理的重複文件有不一樣的文件名,最簡單的辦法就是經過MD5來肯定兩個文件是否是同樣的。git

def md5sum(filename, blocksize=65536):
    hash = hashlib.md5()
    with open(filename, "rb") as f:
        for block in iter(lambda: f.read(blocksize), b""):
            hash.update(block)
    return hash.hexdigest()

這個方法能夠快速得到一個文件的MD5值,blocksize 能夠根據文件大小和CPU性能調整,通常選擇的值約等於文件的平均大小。github

保存全部文件標識和路徑

接下來遍歷全部文件,使用MD5做爲key,路徑做爲value,保存起來。app

dup = {}

def build_hash_dict(dir_path, pattern='*.jpg'):
    
    def save(file):
        hash = md5sum(file)
        if hash not in dup.keys():
            dup[hash] = [file]
        else:
            dup[hash].append(file)

    p = Path(dir_path)
    for item in p.glob('**/' + pattern):
        save(str(item))

處理重複文件

最後一步很是簡單,把上一步創建的字典作一個簡單的過濾就能找到重複文件。性能

def get_duplicate():
    return {k: v for k, v in dup.items() if len(v) > 1}

for hash, files in get_duplicate().items():
    print("{}: {}".format(hash, files))

接下來你能夠根據本身的須要刪除或者保留某個路徑下的文件,本文到此爲止。測試

完整的腳本代碼: https://gist.github.com/tobyq...
關於做者:

Toby Qin, Python 技術愛好者,目前從事測試開發相關工做,轉載請註明原文出處。ui

歡迎關注個人博客 https://betacat.online,你能夠到個人公衆號中去當吃瓜羣衆。spa

Betacat.online

相關文章
相關標籤/搜索