文章目录

  • 一、简介
  • 二、 重点
  • 1. 数据集划分训练集与测试集
    • 1.1 数据集为视频帧文件夹(文件夹划分)
    • 1.2 数据集为视频文件(文件划分)
  • 2. label的重建
    • 2.1 原label读取
    • 2.2 新label的建立

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

一、简介

本文主要是自己近期在做毕业设计(连续手语识别)时候写的几个python脚本,用于处理数据集的。记录一下。

二、 重点

本文撰写采用Windows操作系统,如果是Linux记得修改字符串分割方式及目录层数多加一层

1. 数据集划分训练集与测试集

1.1 数据集为视频帧文件夹(文件夹划分)

trainNum 参数是划分训练集的视频数,即文件夹数,我的划分是9:1,总数是250个视频,那这里就写225。
dirLongNum 参数为你当前原数据集最深的目录层数
举个例子:
F:\data 是我视频帧数据集

000020是我的一个视频类,里面的事每个视频抽帧后的文件夹,要截止到最后一个文件夹

def splitTrainAndTestOnDir(rootFileDir, dstDir, trainNum, dirLongNum): # dirLongNum目录结构最长多少root_dir = os.walk(rootFileDir)# 训练集、测试集的路径,脚本测试用# root_train_dir = "F:/pytest/datat/train/"root_train_dir = dstDir + "/train/"# root_test_dir = "F:/pytest/datat/test/"root_test_dir = dstDir + "/test/"# 记录训练集个数trainFileCount = 0# 记录当前某类文件夹名lastFileDirName = ""# 开始遍历for root, dirs, files in root_dir:# 组合目录名nameFile = os.path.join(root)# 拆分成数组 注意修改nameArr = nameFile.split("\\")# 判定,根据文件夹目录关系:F:\newdata2\000000\P01_s1_00_0_color,判定 类 目录是否更换,即是否到了新的一类,如果到了,清零计数if lastFileDirName != str(nameArr[-2]):trainFileCount = 0# 重新赋值lastFileDirName = str(nameArr[-2])print(nameArr)# 训练集的数量if trainFileCount < trainNum:# 移动一次,加一trainFileCount = trainFileCount + 1# 定义训练集路径dstTrainPath = root_train_dir + str(nameArr[-2]) + "/" + str(nameArr[-1])# 由于遍历时候只需要带有类别和类别内的文件夹两层,根据当前路径得到了len(nameArr)==5时候是拆分后的全路径,然后进行文件夹复制,即将000000\某一个文件夹移动到新的目录下if len(nameArr) == dirLongNum:shutil.copytree(nameFile, dstTrainPath)else:# 类似于train,将类内剩余部分划分为测试集dstTestPath = root_test_dir + str(nameArr[-2]) + "/" + str(nameArr[-1])shutil.copytree(nameFile, dstTestPath)

不明白的部分可以保留住print(nameArr),后面的注释看一下

1.2 数据集为视频文件(文件划分)

这次是记录文件数

def splitTrainAndTest(rootFileDir, dstDir, trainNum): #, trainDir, testDirroot_dir = os.walk(rootFileDir)# root_train_dir = "F:/pytest/datat/train/"root_train_dir = dstDir + "/train/"# root_test_dir = "F:/pytest/datat/test/"root_test_dir = dstDir + "/test/"trainFileCount = 0lastFileDirName = ""for root, dirs, files in root_dir:for f in files:nameFile = os.path.join(root, f)print(nameFile)nameArr = nameFile.split("\\")if lastFileDirName != str(nameArr[-2]):trainFileCount = 0lastFileDirName = str(nameArr[-2])print(nameArr)if trainFileCount < trainNum:trainFileCount = trainFileCount + 1dstTrainPath = root_train_dir + str(nameArr[-2]) + "/" + str(nameArr[-1])creatDir(root_train_dir + str(nameArr[-2]))print(dstTrainPath)shutil.copy(nameFile, dstTrainPath)else:dstTestPath = root_test_dir + str(nameArr[-2]) + "/" + str(nameArr[-1])creatDir(root_test_dir + str(nameArr[-2]))shutil.copy(nameFile, dstTestPath)

2. label的重建

由于提供的数据集label不能直接使用,有所变化,转化成tsn的输入形式。这里学习着写了一下文件的读取与生成,思路来自于LeetCode的一到题,没事多刷刷算法能给自己提供更多的思路方法。

2.1 原label读取

采用字典去存取,因为后边会需要,一个类有多个视频,我得通过类文件夹去更新label,而不是计数的形式

def getLabelDict(labelFile):f = codecs.open(labelFile, mode='r', encoding='utf-8')  # 打开txt文件,以‘utf-8’编码读取line = f.readline()  # 以行的形式进行读取文件list1 = []dict1 = {}while line:print(line)a = line.split()b = a[0:1]   # 这是选取需要读取的位数c = a[1:2]dict1[str(b[0])] = str(c[0])list1.append(b)  # 将其添加在列表之中line = f.readline()f.close()return dict1

2.2 新label的建立

其中len(nameArr)的长度根据实际情况判定,这个只读取到类文件夹下的视频帧文件夹长度即可,满足长度的打标签,否则从root层就开始打label。

def listfiles(rootDir,txtfile,dict1):ftxtfile = open(txtfile, 'w', encoding='utf-8')list_dirs = os.walk(rootDir)count = 0fixNum = []for root, dirs, files in list_dirs:for f in files:nameFile = os.path.join(root, f)fixNum.append(nameFile)name = os.path.join(root)# print(os.path.join(root))# print(os.path.join(root,f))nameArr = name.split("\\")print(nameArr)label = ""try:# print(dict1[str(nameArr[4])])if len(nameArr) == 4 :# label = str(dict1[str(nameArr[4])])# print(label)txtString = os.path.join(root) + ' ' + str(len(fixNum)) + ' ' + str(dict1[str(nameArr[2])]) + '\n'print(txtString)ftxtfile.write(txtString)except:label = '1'fixNum = []count = count + 1#print rootDir+"has"+str(count)+"files"print( rootDir+"has "+str(count)+" files" )

python实用的几个脚本程序(自己在用)相关推荐

  1. Python实用脚本实践

    Python实用脚本实践 一.文件相关 查找文件 import os path = 'xxx' files = os.listdir(path)for f in files:if f.endswith ...

  2. Linux在后台运行python程序、脚本程序、可执行程序等,关闭终端仍可保持程序运行

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 Linux在后台运行python程序.脚本程序.可执行程序等,关闭终端仍可保持程序运行 文章目录: 1 为什么需要后台运 ...

  3. windows的.bat批处理文件运行Python脚本程序

    windows的.bat批处理文件运行Python脚本程序 文章目录: 一.如何创建 `.bat` 批处理文件 二.创建执行的Python脚本程序 一.如何创建 .bat 批处理文件 创建.bat 批 ...

  4. 解释python脚本程序的name变量及其作用_一些概念总结

    is 与 == 的区别 Python中万物皆对象,每个对象都包含3个属性:id,type,value.1.id就是对象地址,可以通过内置函数id()查看对象引用的地址.2.type就是对象类型,可以通 ...

  5. 《从问题到程序:用Python学编程和计算》——2.6 简单脚本程序

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.6节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2. ...

  6. Python实用案例,Python脚本,Python实现批量下载百度图片

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  7. 以下选项中使python脚本程序转变为_以下选项中使python脚本程序转变为可执行程序的第三方库的是:...

    [多选题]拉式市场的供应链系统就是以客户为导向进行( ). [单选题]五行关系中"见肝之病,知肝传脾"是指 [单选题]已知立体的主视图和俯视图,正确的左视图是(         ) ...

  8. Python实用案例,Python脚本,Python实现批量加水印

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  9. 十个Python实用脚本,快用起来

    在日常的工作中,我们总会面临到各式各样的问题. 其中不少的问题,使用一些简单的Python代码就能解决. 不久前的复旦大佬,用130行Python代码硬核搞定核酸统计,大大提升了效率,节省了不少时间. ...

最新文章

  1. 总结六条对我们学习Linux系统有用的忠告
  2. 用 C 语言开发一门编程语言 — 条件分支
  3. 实时计字数提醒的文本框
  4. 如何轻松愉快的理解条件随机场(CRF)
  5. [前台]---js获取input标签中name相同的各个value值
  6. C++基础::函数、类、类型所在的头文件 接口的介绍
  7. php mysql 用户修改_PHP+MYSQL实现用户的增删改查,mysql增删_PHP教程
  8. bootstraptable查看详情_bootstrap table detailView详情视图树形模式
  9. 注入漏洞之sql注入漏洞
  10. 大小端转换定义结构体的技巧
  11. 批判性思维-真理连贯论
  12. Ubuntu 使用firefox插件下载百度云文件
  13. 年薪90万的阿里p7和副处级干部选哪个?
  14. 【LaTeX应用】画图,上面一个图形,下面两个图形,竖直方向居中
  15. 关于入门Android studio的那些问题那些事
  16. QNX Neutrino 进程间通信编程之Signals
  17. [osg]OSG中的颜色数组,法向数组
  18. 亮亮自己制作的搜狗输入法皮肤
  19. 数据分析从业人员获得更高学位的主要理由
  20. WIN10+MATLAB2018b+STK11.6+MATLAB_Connectors1.0.11安装记录

热门文章

  1. 性能测试分析与调优原理
  2. 利用Spring MVC 上传图片文件
  3. 利用RMAN转移裸设备到文件系统
  4. mathematica 下载安装注册激活大本营
  5. 新设计了自己博客的模板
  6. 分布式数据库中间件 MyCat 安装及使用
  7. Debian 9 更换源 使用国内源 配置方法
  8. Docker教程(一) Docker入门教程
  9. HomeBrew 安装 国内源
  10. Java中的注解 Annotations