[Python]335 重複する画像を削除する 改良版

[M1 Mac, Big Sur 11.6.7, Python 3.10.4]

前回の改良版です。

前回のスクリプトでは、コピーした画像が3枚ある場合、三つ巴になって3枚全て削除対象になる可能性があるため、st_birthtime(元ファイル作成時刻)が同じケースではst_ctime(コピーした時刻)が古い方を削除対象にするようにしました。これで最も新しいコピー画像が残ります。

最初からst_ctimeを判断基準にするとスクリプトがよりシンプルになります。

このスクリプトは先日製作したRustアプリにツールとして登録しました。

import os,glob,itertools,cv2
import numpy as np

path_list = glob.glob("/Desktop/temp/*.png")

delete_list = []
for pair in itertools.combinations(path_list, 2):
    path_pair = list(pair)
    
    image1 = cv2.imread(path_pair[0])
    stat1 = os.stat(path_pair[0])
    btime1 = stat1.st_birthtime
    ctime1 = stat1.st_ctime
    
    image2 = cv2.imread(path_pair[1])
    stat2 = os.stat(path_pair[1])
    btime2 = stat2.st_birthtime
    ctime2 = stat2.st_ctime  

    result_compare = np.array_equal(image1, image2)
        
    if result_compare == True:
        if btime1 > btime2:
            delete_list.append(path_pair[1])
        elif btime1 < btime2:
            delete_list.append(path_pair[0])
        else:
            if ctime1 > ctime2:
                delete_list.append(path_pair[1])
            else:
                delete_list.append(path_pair[0])
                
print(delete_list)

for file in delete_list:
    try:
        os.remove(file)
    except FileNotFoundError:
        pass