kouの個人blog

ファイル名・ファイル内容を比べて、同じファイルを見つけ出す


こちら最初を作ったきっかけは、自分長い間でPCの中数万の画像データが収集してました、最初はPHPを学んだ時一度PHPで作りました、その後学校pythonを学び、もっと検索速度を上がらないがpythonで作り直しました。 数が多く、一回でフィルターができないを考え、前回フィルターした場所をメモをすれば、次には前回フィルターした場所を入力して続いてフィルターすることもできように改善しめました。


                        
    from Mydef import *
    import os
    from PIL import Image
    #--モード選択------------
    print("-------------------選択した数字を入力-----------------------")
    print("-[1]フォルダの間で,もそファイル名が同じなら、ファイルのデータを比べる")
    print("-[2]フォルダの間で,同じデータのファイルを見つけ出す---------------")
    print("-[3]フォルダ内だけ,同じデータのファイルを見つけ出す---------------")
    model = int(input())
    #----------------------

    print("サンプルフォルダのURL入力")
    url_00 = input()
    imglist_00={}
    imglist_00 = filelist_x(url_00,imglist_00)

    if model != 3 :
        print("フィルターするフォルダのURL入力")
        url_N = input()
        imglist_N={}
        imglist_N = filelist_x(url_N,imglist_N)

    # print("同じデータの移動場所を入力")
    backup = "H:\kari"



    #对比同名 同内容文件
    if model == 1 :
        for imgname_00 in imglist_00 :
            for imgname_N in imglist_N:
                if imgname_00 == imgname_N :
                    img_00 = imglist_00[imgname_00]
                    img_N = imglist_N[imgname_N]
                    img_00 = Image.open(img_00)
                    img_N = Image.open(img_N)
                    if img_00 == img_N :
                        img_N.save(backup + "\\"+imgname_N)
                        os.remove(imglist_N[imgname_N])



    #把每个文件打开 与目标文件夹中文件进行内容对比
    elif model == 2 :
        num = 0
        for imgname_00 in imglist_00 :
            if imgname_00.endswith("jpg") or \
                imgname_00.endswith("jpeg") or \
                imgname_00.endswith("png") or \
                imgname_00.endswith("bmg") or \
                imgname_00.endswith("gif")  :
                img_00 = imglist_00[imgname_00]
                img_00 = Image.open(img_00)
                for imgname_N in imglist_N:
                    if os.path.exists(imglist_N[imgname_N]) :
                         if imgname_N.endswith("jpg") or \
                            imgname_N.endswith("jpeg") or \
                            imgname_N.endswith("png") or \
                            imgname_N.endswith("bmg") or \
                            imgname_N.endswith("gif")  :
                            img_N = imglist_N[imgname_N]
                            img_N = Image.open(img_N)
                            if img_00 == img_N :
                                img_N.save(backup + "\\"+imgname_N)
                                try:
                                    os.remove(imglist_N[imgname_N])
                                except :
                                    pass

            print(str(num+1)+"/"+str(len(imglist_00)),end=",")
            num = num+1

    #同文件夹内 内容筛选   gif删除原文件有问题 暂不支持
    elif model == 3 :
        key = 0
        img_num = {}
        for imgname_00 in imglist_00 :
            if imgname_00.endswith("jpg") or \
                imgname_00.endswith("jpeg") or \
                imgname_00.endswith("png") or \
                imgname_00.endswith("gif") or \
                imgname_00.endswith("bmg") :

                img_num[key] = imgname_00
                key = key+1

        #样本起始位置---------------
        try :
            print ("途中からの場合位置を入力してください、入力しない場合は最初からになります")
            begin = int(input())

            img_num_begin = {}
            for k in img_num :
                if k >= begin :
                    img_num_begin[k] = img_num[k]
        except :
            img_num_begin =img_num.copy()

        #--------------------------
        for img_namekey in img_num_begin :
            img_00 = imglist_00[img_num_begin[img_namekey]]
            if os.path.exists(img_00) :
                img_00 = Image.open(img_00)
            for img_namekey_n in img_num :
                if img_namekey_n > img_namekey :
                    img_N = imglist_00[img_num[img_namekey_n]]
                    if os.path.exists(img_N) :
                        img_N = Image.open(img_N)
                        try :
                            if img_00 == img_N :
                                img_N.save(backup + "\\"+img_num[img_namekey_n])
                                os.remove(imglist_00[img_num[img_namekey_n]])
                        except :
                            pass

            print(str(img_namekey+1)+"/"+str(len(img_num)),end=",")