赞
踩
我现在有一个文件夹5折交叉验证数据集
,太长了简称为a
好了。。。里面有5个文件夹,image0
,image1
…每个文件夹下有8个类别 class1
,class2
,class3
…需要把类别中的文件都复制到一个目标文件夹b
,这个文件夹是这样的,有5个子文件夹,命名为0
,1
,2
,3
,4
,(就是第几折),每个文件夹下又分成2个子文件夹train
,test
,每个train文件夹下有8个类,就是a
那边的8个类,
a和b的关系就是:
0
的测试集(即test
)就是image0
,0
的训练集(即train
)就是image1
,image2
,image3
,image4
;
1
的测试集(即test
)就是image1
,1
的训练集(即train
)就是image0
,image2
,image3
,image4
;
2
的测试集(即test
)就是image2
,2
的训练集(即train
)就是image0
,image1
,image3
,image4
;
3
的测试集(即test
)就是image3
,3
的训练集(即train
)就是image0
,image1
,image2
,image4
;
4
的测试集(即test
)就是image4
,4
的训练集(即train
)就是image0
,image1
,image2
,image3
;
因为怕错,所以用手动的方法,结果当时花了40分钟,就是手动把每个类的东西全选然后复制1次,粘贴5次到不同的地方,我分神了,反正一共粘贴了200次。。。,于是搞好了很久之后,决定搞个代码,万一下次数据集更大怎么办,还是让电脑来吧
先搞定简单的复制,参考这篇博客https://blog.csdn.net/YeziTong/article/details/84942629
sourcePath = '.\Square_train';
targetPath = '.\Square_test';
fileList = dir(sourcePath);
for k = 3 :5: length(fileList)
movefile([sourcePath,'\',fileList(k).name],targetPath);
end
%copyfile([sourcePath,'\',fileList(k).name],targetPath)
我用到的是原博主注释掉的copyfile,(复制功能),for循环对我意义不大,因为实现的功能不一样,感谢博主染血白衣
然后实现对原始文件下a的文件遍历,受第一步的启发,其实就是不断地取出对应路径,再拼接起来,主要注意for循环的起点,对于如果读出来的内容是文件夹的话,从3开始,如果读出的内容全是文件的话,从1开始。
构建新的文件夹b,(全空,没有文件),主要使用mkdir函数,class1,class2的名字我在2.遍历源文件夹a的时候自动获取了,感觉这样会比较方便,当然可能并不。。。
把文件一个一个复制到文件夹b的对应位置中,其实就是再次遍历原始文件夹a,然后对里面的每个文件进行5次复制,根据它的具体情况,把它复制到不同的地方。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。