python实现将两个文件夹合并至另一个文件夹(制作数据集)


Posted in Python onApril 03, 2020

此操作目的是为了制作自己的数据集,深度学习框架进行数据准备,此操作步骤包括对文件夹进行操作,将两个文件夹合并至另一个文件夹

该实例为一个煤矿工人脸识别的案例;首先原始数据集(简化版的数据集旨在说明数据准备过程)如下图所示:

该数据集只有三个人的数据,A01代表工人甲的煤矿下的照片,B01代表工人甲下矿前的照片,同理A02、B02代表工人乙的矿下、矿上的照片数据。。。

如下图所示

python实现将两个文件夹合并至另一个文件夹(制作数据集)

矿下

python实现将两个文件夹合并至另一个文件夹(制作数据集)

矿上

python实现将两个文件夹合并至另一个文件夹(制作数据集)

开始制作数据集:

首先建立训练集(0.7)和测试集(0.3),即建立一个空白文件夹

python实现将两个文件夹合并至另一个文件夹(制作数据集)

将该文件夹分为四个小文件夹(空),train代表训练集,val代表测试集,valb代表矿井下的测试集,vall代表矿井上的测试集,注:后边两个测试集可有可无

最终制作的数据集如下所示:

python实现将两个文件夹合并至另一个文件夹(制作数据集)

python实现将两个文件夹合并至另一个文件夹(制作数据集)

下面为所有的程序详解

#导入一些进行该操作需要的库
import numpy as np
import os
import random
import shutil

path=r'C:\Users\Administrator.SKY-20180518VHY\Desktop\rx\ore'#原始数据集的路径
data=os.listdir(path)
#listdir该操作([添加链接描述](https://3water.com/article/184106.htm))在我的上篇文章中有所介绍,此操作能读取的内容为A01、A02、A03、B01、B02、B03这些文件夹
#print(data)

root=path#复制原始数据路径path

读取文件夹 A01、A02、A03、存入c列表中B01、B02、B03,将其存入d列表中

c=[]
d=[]#创建两个空列表
for i in range(len(data)):
 a=data[i][0]
 if (a=='A'):
  c.append(data[i])
 else:
  d.append(data[i])
#print(d)

python实现将两个文件夹合并至另一个文件夹(制作数据集)

导入路径四个空文件夹的路径

train_root='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\train'
val_root='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\val'
vall_root='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\valb'
valb_root='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\vall'


for i in range(len(c)):
 qqq=os.path.exists(train_root+'/'+c[i][1:])
 if (not qqq):
  os.mkdir(train_root+'/'+c[i][1:])
  qq=os.path.exists(val_root+'/'+c[i][1:])
  if (not qq):
   os.mkdir(val_root+'/'+c[i][1:])
   qq=os.path.exists(vall_root+'/'+c[i][1:])
   if (not qq):
    os.mkdir(vall_root+'/'+c[i][1:])
    qq=os.path.exists(valb_root+'/'+c[i][1:])
    if (not qq):
     os.mkdir(valb_root+'/'+c[i][1:])
#f=[]
#g=[]
aq='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\rx\\ore\\'
train_root1='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\train\\'
val_root1='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\val\\'
vall_root1='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\valb\\'
valb_root1='C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\vall\\'
for i in range(len(c)):
 a=c[i]
 data_0=os.listdir(aq+a)
# f.append(data_0)
# g.append(aq+a)
#print(f)
#print(g) 
 random.shuffle(data_0)#打乱A中数据
 for j in range(len(d)):
  b=d[j]
  if(a[1:]==b[1:]):
   data_1=os.listdir(aq+b)
   #print(aq+b);
   random.shuffle(data_1)
   #print(data_1)
   #print(data_0,data_1)
   for z in range(len(data_0)):
    #print(z)
    pic_path=aq+a+'/'+data_0[z]
    
    if z<int(len(data_0)*0.7):
     obj_path=train_root1+a[1:]+'/'+data_0[z]
     
    else:
     obj_path=val_root1+a[1:]+'/'+data_0[z]
     obl_path=vall_root1+a[1:]+'/'+data_0[z]
     shutil.copyfile(pic_path,obl_path)
   #print(len(data_0),len(data_0)*0.7)
    #if (os.path.exists(pic_path)):
    shutil.copyfile(pic_path,obj_path)
   for z in range(len(data_1)):
    pic_path=aq+b+'/'+data_1[z]
    if z<int(len(data_1)*0.7):
     obj_path=train_root1+b[1:]+'/'+data_1[z]
     
    else:
     obj_path=val_root1+b[1:]+'/'+data_1[z]
     obl_path=valb_root1+a[1:]+'/'+data_1[z]
     shutil.copyfile(pic_path,obl_path)
    #if (os.path.exists(pic_path)):
    shutil.copyfile(pic_path,obj_path)#shutil.copyfile( src, dst)

从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉

将数据送入pytorch中,对数据进行迭代

from __future__ import print_function, division
import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim import lr_scheduler
import numpy as np
import torchvision
from torchvision import datasets, models, transforms
import matplotlib.pyplot as plt
import time
import os
import copy
import math
import torch.nn.functional as F

D=299

data_transforms = {
 'train': transforms.Compose([
#  transforms.RandomResizedCrop(D),
  transforms.Resize(D),
  transforms.RandomCrop(D),
  transforms.RandomHorizontalFlip(),
  transforms.ToTensor(),
  transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
 ]),
 'val': transforms.Compose([
  transforms.Resize(D),
  transforms.CenterCrop(D),
  transforms.ToTensor(),
  transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
 ]),
}

data_dir = r'C:\Users\Administrator.SKY-20180518VHY\Desktop\myself'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
           data_transforms[x])
     for x in ['train', 'val']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=200,
            shuffle=True, num_workers=4)
    for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#print(image_datasets['train'][0])
img, label = image_datasets['val'][11] 
print(label)#输出为2即第三类

以上这篇python实现将两个文件夹合并至另一个文件夹(制作数据集)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 字典(dict)按键和值排序
Jun 28 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
python实现人脸识别代码
Nov 08 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
12个步骤教你理解Python装饰器
Jul 01 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Django的Modelforms用法简介
Jul 27 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
python属于跨平台语言码
Jun 09 Python
python简单验证码识别的实现过程
Jun 20 Python
pycharm安装及如何导入numpy
Apr 03 #Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 #Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 #Python
Numpy 理解ndarray对象的示例代码
Apr 03 #Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 #Python
Django自定义列表 models字段显示方式
Apr 03 #Python
使用Django清空数据库并重新生成
Apr 03 #Python
You might like
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
佛光寺导游词
2015/02/10 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
python创建字典及相关管理操作
2022/04/13 Python
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
Python开发简易五子棋小游戏
2022/05/02 Python