두 폴더의 중복 파일을 효율적으로 삭제

두 폴더의 중복 파일을 효율적으로 삭제

이전에도 이 방법을 사용했는데 이미지가 너무 많아 삭제해야 할 이미지가 70만 장에 달해 삭제하는 데 10일 이상이 걸렸다. .

두 폴더에서 중복 이미지 삭제

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

해결책

먼저 이미지의 복사본을 만든 다음 이름을 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 파일에 저장됨).

파일 이름에 따라 Image 폴더의 중복 파일을 삭제합니다.

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은 두 폴더의 서로 다른 파일을 비교합니다.

Python 파일 작업, .txt 텍스트 파일 작업(읽기, 쓰기, 수정, 복사, 병합), json 텍스트 파일 작업, json 문자열과 사전 간 변환.

추천

출처blog.csdn.net/qq_41701723/article/details/134691848