父文件夹中包含多个子文件夹,从每一个子文件夹中随机采样一定数量的样本,存入到新的文件夹中,新文件夹名与采样的子文件夹名相同
import os, random, shutil
def get_data(rootDir):#构造获取数据的函数
for root, dirs, files in os.walk(rootDir):#从父文件夹路径下读取信息,root获取父文件夹名,dirs子文件夹名,所有子文件下的数据
i = 0
for dir1 in dirs:#遍历每一个子文件夹
#print(dir1)
pathDir = os.listdir(rootDir +'/' + dir1)#获得子文件夹路径
#print(pathDir)
filenumber = len(pathDir)#得到某一个子文件夹下的数据量
i += 1
print(i, ':', filenumber)#获得每个子文件夹下的数据量
picknumber = int(50)#设定超参数,表示取样的数量
sample = random.sample(pathDir, picknumber)#从某子文件夹中随机采样50个数据样本
print(sample)#查看采样结果
for name in sample:#遍历采样得到的所有数据
move_path = "val_data/" + dir1#将采样得到的样本存入到新文件夹中
if not os.path.exists(move_path):#如果文件夹不存在,新建
os.makedirs(move_path)
shutil.move(rootDir +'/' + dir1 + '/' + name, move_path + '/' + name)#将原文件夹中采样得到的数据移动到新文件夹中
if __name__=='__main__':
rootDir = "/home/gpu1/9013/data/ImageNet/train"#父文件夹路径
get_data(rootDir)