用python刪除重複的圖片

weixin_34195364發表於2018-02-06

如下目錄下有一些圖片(來自12306的驗證碼)


10420454-83a1bdcd127b9d36.png
樣例圖

我怎麼把重複的圖片刪除呢?當然如果不多,比如下面幾張,都是人為複製出來的,掃一眼就可以手動刪除了,如果有10000張這樣的圖片並且命名沒有規則呢?如下圖:


10420454-f4e8671ac855d4a5.png
image.png

那就用Python來幫我們做吧。

思路:
如果兩個檔案的大小不同,那麼這兩個檔案肯定不同,如果兩個檔案大小相同並且MD5也相同則我們判定為兩個檔案相同

# coding: utf-8
import os
import md5
def getmd5(filename):
    file_txt = open(filename, 'rb').read()
    m = md5.new(file_txt)
    return m.hexdigest()
def main():
    path = 'C:\\Users\\wu\\Desktop\\pic\\1\\'
    all_size = {}
    total_file = 0
    total_delete = 0
    for file in os.listdir(path):
        total_file += 1
        real_path = os.path.join(path, file)
        if os.path.isfile(real_path) == True:
            size = os.stat(real_path).st_size
            name_and_md5 = [real_path, '']
            if size in all_size.keys():
                new_md5 = getmd5(real_path)
                if all_size[size][1] == '':
                    all_size[size][1] = getmd5(all_size[size][0])
                if new_md5 in all_size[size]:
                    os.remove(file)
                    print '刪除', file
                    total_delete += 1
                else:
                    all_size[size].append(new_md5)
            else:
                all_size[size] = name_and_md5
    print '檔案個數:', total_file
    print '刪除個數:', total_delete
if __name__ == '__main__':
    main()

執行結果:刪除的三張圖是我手動複製增加的,與預期完全一樣。

10420454-a6f01d91f6b5a1c4.png
執行結果

參考 https://www.cnblogs.com/luolizhi/p/5591186.html

相關文章