2 つのフォルダー内の重複ファイルを効率的に削除する

2 つのフォルダー内の重複ファイルを効率的に削除する

以前もこの方法を使っていましたが、削除が必要な画像が70万枚と多すぎて、削除に10日以上かかっていました。

2 つのフォルダーから重複した画像を削除する

ここに画像の説明を挿入します
ここに画像の説明を挿入します

解決

まず画像のコピーを作成し、それから名前をtxtに変更します

import os

def change_file_extension(path, old_ext, new_ext):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(old_ext):
                old_file = os.path.join(root, file)
                new_file = os.path.splitext(old_file)[0] + new_ext
                os.rename(old_file, new_file)

# 示例:将路径为 "C:\test" 下所有 .txt 文件的后缀修改为 .md
change_file_extension("D:\dataset\image\\1", ".jpg", ".txt")

ここに画像の説明を挿入します

画像とラベルの名前が同じになりました。画像内で最も一般的なファイル名を比較して見つけ、それらを txt ファイルに書き込みます。

import os
import codecs
# 指定两个文件夹的路径
folder1 = r'D:\dataset\image\1'
folder2 = r'D:\dataset\ann'

# 获取文件夹1中所有文件的文件名  (这里的场景是jpg)
files1 = set(os.listdir(folder1))

# 获取文件夹2中所有文件的文件名  (这里的场景是txt)
files2 = set(os.listdir(folder2))



# 计算出缺少的文件,即在文件夹1中出现但不在文件夹2中出现的文件
missing_files = files1 - files2

#将缺少的文件保存到txt中
path=  'D:\code\yolov8-pytorch-master\\needRM.txt'
lt = open(path, "w")

# 打印缺少的文件名
print("缺少的文件:")
for file in missing_files:
    print(file)
    lt.writelines(file + '\n')  # 每个元素以空格间隔,一行元素写完并换行

ここに画像の説明を挿入します
ここに画像の説明を挿入します
needRM.txt ファイルを読み取った後、サフィックスを jpg に戻します。

import codecs
import os

path = 'D:/code/yolov8-pytorch-master/needRM.txt'  # 标签文件train路径
newpath = 'D:/code/yolov8-pytorch-master/needRMNew.txt'  # 标签文件train路径

file = open(path, "r", encoding="utf8")
txt = file.read()
a = txt.replace(".txt", ".jpg")  # read默认内容读出来是字符串格式
file.close()  # 这一步必须关闭
file = open(newpath, "w", encoding='utf8')
file.write(a)  # 把修改后的a写入文件
file.close()

ここに画像の説明を挿入します

このようにして、削除する必要があるファイルのファイル名を取得します(すべてこのtxtファイルに保存されます)。

ファイル名に従って画像フォルダー内の重複ファイルを削除します

import os

# 将待删除文件夹图片路径补全
file = open(r"D:\code\yolov8-pytorch-master\needRMNew.txt", "r")
list1 = file.readlines()
for i in list1:
    i = i.strip('\n')
    delPath = "D:\dataset\image\\1\\"+i
    print("remove pic:  "+ delPath, end="\n")
    os.remove(delPath)
file.close()



ここに画像の説明を挿入します

仕上げる!
ここに画像の説明を挿入します

以前の方法と比べて改善された点は、以前
はダブルトラバーサルであり、時間計算量が高かったことですが、
現在では set を直接使用して重複していないものを見つけ、時間計算量が軽減されています。

Python を使用してファイル名のサフィックスをバッチ変更する

Python は 2 つのフォルダー内の異なるファイルを比較します

Python ファイル操作、.txt テキスト ファイルに対する操作 (読み取り、書き込み、変更、コピー、マージ)、json テキスト ファイルに対する操作、および json 文字列と辞書間の変換。

おすすめ

転載: blog.csdn.net/qq_41701723/article/details/134691848