对ISIC2018数据集按照类别划分文件夹(以val为例)

 

代码参考 数据集按照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))

部分输出:

 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值