高效的将两个文件夹中多余的文件删除
- 解决方案
之前使用的是这个方法,但是图像太多,需要删除的有70W张,得删10多天。。
将两个文件夹中重复的图象删除
解决方案
先将image图像复制一份,然后改名为txt
import osdef 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_extos.rename(old_file, new_file)# 示例:将路径为 "C:\test" 下所有 .txt 文件的后缀修改为 .md
change_file_extension("D:\dataset\image\\1", ".jpg", ".txt")
这下图片和标签的名称一样了,对比找出image中多的文件名,并写入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 ospath = '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\\"+iprint("remove pic: "+ delPath, end="\n")os.remove(delPath)
file.close()
完成!
较之前的方法改进在于
之前是双重遍历,时间复杂度高
现在直接使用set找出不重复的,时间复杂度降低
使用Python批量修改文件名后缀
python对比两个文件夹中不同的文件
python之文件操作、对.txt文本文件的操作(读、写、修改、复制、合并)、对json文本文件的操作、json字符串与字典的相互转换。