代码参考 数据集按照csv格式标签划分为训练集和验证集(完整代码)_train.csv-CSDN博客
但是原博主的代码对应的csv文件和ISIC不太一样,所以做了修改
一。将csv文件转换为list:
import os
import shutil
import pandas as pd
import random
import os
#判断某个文件夹是否存在某个文件:
def file_exists_in_folder(folder_path, file_name):
return any(file_name in os.path.join(folder_path, f) for f in os.listdir(folder_path))
# 打开表格文件并读取
f = open("E:\image_class_folder\ISIC2018_Task3_Validation_GroundTruth\ISIC2018_Task3_Validation_GroundTruth.csv", "rb") # 打开csv文件
list = pd.read_csv(f) # 这句不能少
print('list:\n',list)
list输出:
二。新建需要的文件夹(也可以在文件管理中创造)
# 创建文件夹
for i in range(7): # "7"指的是0-6总共7个类别
if not os.path.exists('E:/image_class_folder/val/' + str(i)): # 最后一个 / 不要漏
os.mkdir('E:/image_class_folder/val/' + str(i))
可以看到生成了0,1,2,3,4,5,6这七个文件夹(注意val这个文件夹是必须在运行这段代码之前就存在的)
三。复制文件到相应的文件夹中
#根据csv中的分类名称创建一个列表,这样就可以根据class_list[0-6]这7个索引值获取到csv中这七个分类的索引名称str,
#继而根据str==1作为筛选条件筛选出list(原来csv转换得到)中符合这个类别的图片名称
class_list=['MEL','NV','BCC','AKIEC','BKL','DF','VASC']
print('class_list:\n',class_list)
#遍历0-6,开始向0-6这7个文件夹复制相应的文件
add_num_total=0#统计一共进入了了多少数据
for i in range(7):
# 将list中符合[class_list[i]] == 1条件的信息组成一个新列表listnew_i
listnew_i =list[list[class_list[i]] == 1]
print('listnew_{}:\n{}'.format(i,listnew_i))
print('listnew_{}长度:{}'.format(i,len(listnew_i)))
# 将listnew_i这个列表使用”image“做切片,得到只含有名称的新列表i_l
i_l = listnew_i["image"].tolist()
print('{}_l:\n{}'.format(i,i_l))
print('{}_l长度:{}'.format(i,len(i_l)))
j = str(i)
add_num=0#统计此次类别文件夹下移动进入了多少个文件
for each in i_l:
folder_path='E:/image_class_folder/ISIC2018_Task3_Validation_Input/'
file_name = 'E:/image_class_folder/ISIC2018_Task3_Validation_Input/' + each + '.jpg'
if file_exists_in_folder(folder_path, file_name):#源文件夹存在才有可能放进去
if not file_exists_in_folder('E:/image_class_folder/val/' + j,file_name):#避免重复放入
#shutil.move(file_name, 'E:/image_class_folder/val/' + j)
shutil.copy(file_name, 'E:/image_class_folder/val/' + j)
add_num=add_num+1
print('{}文件夹进入了{}'.format(i, add_num))
add_num_total+=add_num
print('*'*20, "完成了{}类的添加".format(i), '*'*20)
print('总共进入{}'.format(add_num_total))
部分输出: