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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
详解django三种文件下载方式
Apr 06 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
python实现字符串加密成纯数字
Mar 19 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 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
php csv操作类代码
2009/12/14 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python paramiko模块学习分享
2017/08/23 Python
浅析python继承与多重继承
2018/09/13 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
python遍历路径破解表单的示例
2020/11/21 Python
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
父亲节活动策划方案
2014/08/24 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
A22国内电台短波广播频率表
2022/05/10 无线电