Python隨機抽取文件_train_val


隨機挑選文件夾下文件

 根據序號挑選文件,根據序號挑選json行
 根據文件名挑選文件

Python語法說明

Python 文件讀寫權限。判斷文件目錄等方式
   python中對文件/文件夾的操作涉及: os模塊 os.path模塊 shutil模塊。
python操作json文件通過了兩種方法:
   load():用於讀取json文件;  loads() :將json字符串轉換成字典格式; load json string
   dump():用於寫入json文件    dumps() 將字典格式數據轉換成json格式;
Python 的  random  隨機選擇元素的方法
   random.random()  random.uniform(1,10) random.randint(1,14) #指定范圍,取一個隨機整數(顧頭顧尾) random.shuffle()
   random.choice(s)
   random.sample()

YOLO訓練集和測試集

 訓練集和測試集 數據划分

代碼示例

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import os
import os.path
import random
import shutil
import json

def choose_img_num(total_num,choose_num):
    file_path_set= ["/opt/test/dd","/opt/test/ll","/opt/test/pp"]
    file_path = file_path_set[0]
    img_data= os.listdir(file_path)
    random.seed(210)
    choose_file_index = random.sample(range(total_num),choose_num)
    file_path_choose =file_path +"_pick"
    if not os.path.exists(file_path_choose):
        os.mkdir(file_path_choose)
        print(file_path_choose)
    for i,data in enumerate(img_data):
        if i in choose_file_index:
            src_img=  os.path.join(file_path,data)
            dst_img = os.path.join(file_path_choose,data)
            if not os.path.exists(dst_img) or not os.path.isfile(dst_img):
                shutil.copyfile(src_img,dst_img)
    # 提取json-默認每行的對應一個圖片
    json_file_path = r"/opt/test/pre/dd/my.json"
    json_des_path = r"/opt/test/my_choose.json"
    choose_file_index = random.sample(range(39),2)
    with open(json_file_path,mode="r",encoding="utf8") as f_r,open(json_des_path,mode="a",encoding="utf8") as f_w:
        for num,data in enumerate(f_r):
            if num in choose_file_index:
                print(num,data)
                f_w.write(data)
    

if __name__== "__main__":
    file_path = "/opt/test/dd"
    img_data= os.listdir(file_path)
    random.seed(210)
    choose_file = random.sample(img_data,2)
    print(choose_file)
    src_json=  r"/opt/test/pre/dd/my.json"
    with open(src_json,'r',encoding='utf8')as fp:
        # 逐行處理
        for num,data in enumerate(fp):
            json_data = json.loads(data)
            if  json_data["image_key"] in choose_file:
                print(json_data["image_key"])
                print(json_data)

示例代碼

  #!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import os
import os.path
import random
from math import floor
import shutil

def gene_yolo_set(base_path,dest_path,choose_ratio):
    """ choose_ratio  train set  [0,1]"""
    if not os.path.exists(dest_path):
        os.makedirs(dest_path)
    image_path = os.path.join(base_path,"images")
    txt_path = os.path.join(base_path,"labels")
    img_data= os.listdir(image_path)
    random.seed(210)
    total_num = len(img_data)
    choose_num = floor(total_num * choose_ratio)
    choose_file_index = random.sample(range(total_num),choose_num)

    flag_type = ["train","val"]
    for type_set in flag_type:
        dst_img_path = os.path.join(dest_path,"images",type_set)
        dst_txt_path = os.path.join(dest_path,"labels",type_set)
        if not os.path.exists(dst_img_path):
            os.makedirs(dst_img_path)
        if not os.path.exists(dst_txt_path):
            os.makedirs(dst_txt_path)
    for i,img_nm in enumerate(img_data):
        src_img=  os.path.join(image_path,img_nm)
        txt_nm = os.path.splitext(img_nm)[0]+".txt"
        src_label =  os.path.join(txt_path,txt_nm)
        if i in choose_file_index:
            dst_img =   os.path.join(dest_path,"images","train",img_nm)
            dst_label =  os.path.join(dest_path,"labels","train",txt_nm)
        else:
            dst_img =  os.path.join(dest_path,"images","val",img_nm)
            dst_label = os.path.join(dest_path,"labels","val",txt_nm)
        shutil.copyfile(src_img,dst_img)
        shutil.copyfile(src_label,dst_label)


if __name__== "__main__":
    exp_base_path = r"D:\data\yolo_data"
    exp_dest_path =  r"D:\data\deal_set"
    exp_choose_ratio=0.1
    gene_yolo_set(exp_base_path,exp_dest_path,exp_choose_ratio)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM