隨機挑選文件夾下文件
根據序號挑選文件,根據序號挑選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)