数据集划分训练集和验证集脚本

  • Post author:
  • Post category:其他



'''
将数据集划分训练集和验证集
不仅限于划分.josn格式,可以为任意格式数据集 .glob()处修改
'''
import random
from pathlib import Path
import os
import shutil   #shutil.copy()的库,shutil相关函数处理文件

#glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,支持通配符操作。
#‘*’ 匹配0个或多个字符,即json全部文件
pathes = Path("./box_labelmejson").glob("*.josn")

# pathes_list = [str(pth) for pth in pathes]  
#列表解析 生成列表。列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码的同时不损失任何可读性。而且,性能还快很多很多!
#str(pth)最后执行的
#下三行代码等同于上一行代码
pathes_list = []
for pth in pathes:
    pathes_list.append(pth)   

eval_data = random.sample(pathes_list,int(len(pathes_list)*0.2))    #比例划分2:8
train_data = [i for i in pathes_list if  i not in eval_data]


#os.makedirs(name, mode=0o777, exist_ok=False),一级目录以下创建目录
#os.mkdir()函数创建目录,(创建一级目录)

eval_pth = "./eval_pth"
os.makedirs(eval_pth,exist_ok= True)

train_pth = "./train_pth"
os.makedirs(train_pth,exist_ok= True)


for each_eval_pth in eval_data:         
    shutil.copy(str(each_eval_pth), eval_pth)
''' 
shutil.copy(source, destination)(这种复制形式使用的前提是必须要有 os.chdir(你要处理的路径))   source/destination 都是字符串形式的路劲,其中destination是:
1、可以是一个文件的名称,则将source文件复制为新名称的destination
2、可以是一个文件夹,则将source文件复制到destination中
3、若这个文件夹不存在,则将source目标文件内的内容复制到destination中
'''
for each_train_pth in train_data:
    shutil.copy(str(each_train_pth),train_pth)



版权声明:本文为weixin_47687941原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。