赞
踩
最近老师要求了一个任务,要开始训练数据集了。
然后我就看到了密密麻麻已经将图片标记好的压缩包,jpg,txt,csv,zip文件全部都跑到了一起,我想着不能纯手工分类吧,50多个文件夹,我不得分死。所以就尝试着对这些数据分类了。
解压大家需要自行解压哈
将文件夹内的东西全部移出,并删除空文件夹。同时可以将txt,jpg,csv,zip,rar文件分别放在不同的文件夹内。(这些文件夹如果没有会自动创建)
同时还有按照一定比例随机抽取文件的功能。
下面会有函数的讲解!
先附上代码:
已经给大家写好注释了,注意看哈
# 这是移文件的脚本 import csv import imp import random import shutil import os import glob import os, random, shutil '''这是个移动文件的函数''' def move_file(old_path, new_path,flag): #前者可以是文件(文件夹) 后者为文件夹 flag 用于判断是否为文件夹 if flag == 0: filelist = os.listdir(old_path) #列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。 for file in filelist: src = os.path.join(old_path, file) dst = os.path.join(new_path, file) shutil.move(src, dst) elif flag ==1: #如果不为文件夹,直接移动文件到指定目录 src = old_path dst = new_path shutil.move(src, dst) ''' 参数1:你杂乱无章存放这各种各样文件地文件夹路径 参数2:你新的存放子文件夹的路径 可以进行文件类型的粗分类,可以看代码,再添加你想要单独领出来的文件类型 ''' def move_all_file(old_path_all,new_path): old_path_every ='' #这是该文件夹下具体的文件(包含子文件夹) file_list = os.listdir(old_path_all) #获取文件路径 for i in range(len(file_list)): #遍利每一个文件夹 if os.path.isdir(old_path_all+"/"+file_list[i]): #判断下一个文件是否为文件夹 old_path_every = old_path_all+"/"+file_list[i] #设置总文件夹中每个文件的路径 move_file(old_path_every, new_path,0) os.removedirs(old_path_every) #将空文件夹删除 elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".csv": old_path_every = old_path_all+"/"+file_list[i] mkdir("./csv") move_file(old_path_every, "./csv",1) elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".zip": old_path_every = old_path_all+"/"+file_list[i] mkdir("./zip") move_file(old_path_every, "./zip",1) elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".rar": old_path_every = old_path_all+"/"+file_list[i] mkdir("./rar") move_file(old_path_every, "./rar",1) elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".txt": old_path_every = old_path_all+"/"+file_list[i] mkdir("./txt") move_file(old_path_every, "./txt",1) elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".xml": old_path_every = old_path_all+"/"+file_list[i] mkdir("./xml") move_file(old_path_every, "./xml",1) # remove_file(old_path_all,new_path) #移动不是文件夹的文件 import os '''这个就是一个简单的创建文件夹的函数''' def mkdir(path): folder = os.path.exists(path) if not folder: #判断是否存在文件夹如果不存在则创建为文件夹 os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径 print ("--- new folder... ---") print ("--- OK ---") else: print ("--- There is this folder! ---") '''这个解决多个csv文件合并的问题,解放你的双手''' def csv_row_connect(old_path_all): #合并csv文件 csv_list = glob.glob(old_path_all+'/*.csv') print('共发现%s个CSV文件'% len(csv_list)) print('正在处理............') for i in csv_list: fr = open(i,'r',encoding='utf-8',errors='ignore').read() with open('文件合集.csv','a',encoding='utf-8',errors='ignore') as f: f.write(fr) print('合并完毕!') ''' 从你存放的所有jpg格式图片和txt文件的文件夹中,随机抽取一定比例,放在你的新文件夹下 这里,我是设置的是yolov5要求的数据集格式(注意!!!这里是抽取,不是拷贝,所以抽取比例一定要注意) 这可以按照你输入的比例,随机抽取图片到你的指定文件夹 需要分析一下代码,但是是很简单的!!! 这里还没有优化好,注意看注释,!!!!感叹号的地方就是你要修改的路径 ''' #rate 自定义抽取图片的比例,比方说100张抽10张,那就是0.1 def allocate_date_set(older_picture_path,older_txt_path,rate): #则是随机抽取图片函数 pathDir = os.listdir(older_txt_path) #取图片的原始路径 filenumber=len(pathDir) picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片 sample = random.sample(pathDir, picknumber) #随机选取picknumber数量的样本图片 mkdir("./images/train") mkdir("./images/test") mkdir("./images/val") mkdir("./labels/train") mkdir("./labels/test") mkdir("./labels/val") print (sample) for name in sample: picture_path_every =older_picture_path+'/'+os.path.splitext(name)[0]+".jpg" txt_path_every =older_txt_path+'/'+os.path.splitext(name)[0]+".txt" picture_name = os.path.splitext(name)[0]+".jpg" txt_name = os.path.splitext(name)[0]+".txt" if os.path.exists(picture_path_every) and os.path.exists(txt_path_every): shutil.move(picture_path_every, "./image/test/"+picture_name) #需要修改的地方!!!!!! shutil.move(txt_path_every,"labels/test/"+txt_name) #!!!!!!!!!! return # def move_data_set(): if __name__ == '__main__': move_all_file(old_path_all="./move_to",new_path="./test2") #老目录 新目录 csv_row_connect("./csv") # allocate_date_set(older_picture_path="./images",older_txt_path="./txt",rate = 0.6)#源图片文件夹路径 源txt文件
最后附上我一开始的数据集的样子
就是文件夹下有文件夹文件夹然后再是文件的样子。如果你们刚搜集来的数据也是这个样子,那应该能用我的这一份代码进行快速的分类。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。