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 正则表达式(转义问题)
Dec 15 Python
教你使用python画一朵花送女朋友
Mar 29 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
tensorflow使用指定gpu的方法
Feb 04 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
Pythonic版二分查找实现过程原理解析
Aug 11 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
PHP5 安装方法
2006/10/09 PHP
PHP 表单提交给自己
2008/07/24 PHP
php连接mysql数据库代码
2009/03/10 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
浅析js封装和作用域
2013/07/09 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
python实现飞行棋游戏
2020/02/05 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
安全隐患整改报告
2014/11/06 职场文书
2014年预算员工作总结
2014/12/05 职场文书
田径运动会广播稿
2015/08/19 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js