一开始的文件结构:
----train
|---A
|---1.jpg
|---2.jpg
|---3.jpg
...
|---100.jpg
|---B
|---1.jpg
|---2.jpg
|---3.jpg
...
|---100.jpg
运行代码后的文件结构:
----train
|---A
|---1.jpg
|---9.jpg
|---10.jpg
...
|---100.jpg
|---B
|---2.jpg
|---11.jpg
|---20.jpg
...
|---89.jpg
----val
|---A
|---2.jpg
|---5.jpg
|---6.jpg
...
|---90.jpg
|---B
|---1.jpg
|---3.jpg
|---5.jpg
...
|---100.jpg
# coding=utf-8
import os, random, shutil
def moveFile(fileDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
filenumber = len(pathDir)
picknumber = int(filenumber * ratio) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
for name in sample:
shutil.move(os.path.join(fileDir, name), os.path.join(tarDir, name))
return
if __name__ == '__main__':
ori_path = r'/home/ubuntu/ZQQ/HuaLuBei/data/train' # 最开始train的文件夹路径
split_Dir = r'/home/ubuntu/ZQQ/HuaLuBei/data/val' # 移动到新的文件夹路径
ratio = 0.2 # 抽取比例
for firstPath in os.listdir(ori_path):
fileDir = os.path.join(ori_path, firstPath) # 原图片文件夹路径
tarDir = os.path.join(split_Dir, firstPath) # val下子文件夹名字
if not os.path.exists(tarDir): # 如果val下没有子文件夹,就创建
os.makedirs(tarDir)
moveFile(fileDir) # 从每个子类别开始逐个划分
参考:
https://blog.youkuaiyun.com/u010420283/article/details/90142480
https://blog.youkuaiyun.com/xuru_0927/article/details/89190408