数据集处理(三)——打乱数据集

*完整代码请滑到文章末尾。

一、问题描述

目前已有的数据集包括网上已有的数据集和线下拍摄的数据集,需要进行汇总。同时,为了加强模型的泛化能力,需要打乱数据集。

二、解决思路

已有的数据集包括42088个文件。可以生成42088个不同的随机数,作为文件夹的编号。具体代码如下1

resultList = []  # 用于存放结果的List
A = 50000000  # 最小随机数
B = 50042088  # 最大随机数
COUNT = 42088
# 利用Python中的randomw.sample()函数实现
resultList = random.sample(range(A, B + 1), COUNT);  # sample(x,y)函数的作用是从序列x中,随机选择y个不重复的元素。
print(resultList)  # 打印结果

数据集有四五万个文件夹,每个文件夹内有30~40张图片,数据量颇大。如果将读取文件后重新写入,则需要耗费过多的时间。故最终考虑修改文件夹的名字,代码如下:

#path:文件路径
#filename:修改前的文件名
#n:随机数序号(和修改后的文件名有关)
def rename(path,filename,n):
    count = n
    folderlist=os.listdir(path)
    for folder in folderlist:
        folder=str(folder)
        nowPath=path+"\\"+folder

        targetfolder=str(resultList[count])
        targetPath = path +"\\"+ targetfolder
        os.rename(nowPath,targetPath)
        print(folder+" "+targetfolder)
        count+=1
    return count

三、完整代码

# coding=gbk
import os
import random

def rename(path,filename,n):
    count = n
    folderlist=os.listdir(path)
    for folder in folderlist:
        folder=str(folder)
        nowPath=path+"\\"+folder

        targetfolder=str(resultList[count])
        targetPath = path +"\\"+ targetfolder
        os.rename(nowPath,targetPath)
        print(folder+" "+targetfolder)
        count+=1
    return count

resultList = []  # 用于存放结果的List
A = 50000000  # 最小随机数
B = 50042088  # 最大随机数
COUNT = 42088
n=0
# 利用Python中的randomw.sample()函数实现
resultList = random.sample(range(A, B + 1), COUNT);  # sample(x,y)函数的作用是从序列x中,随机选择y个不重复的元素。
print(resultList)  # 打印结果

#文件夹分布在多个文件,逐个输入。输出的文件夹首尾相接。
path="D:\\train"
print(path)
a=rename(path,resultList,n)

path="D:\\val"
print(path)
b=rename(path,resultList,a)

四、参考文章


  1. Python 产生特定范围内不重复多个随机数的两种方法. ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值