文件夹遍历和文件遍历

# 遍历文件夹和文件,返回文件的路径和对应的文件的名称,同时可以根据自己的应用需要进行更改
def get_img_file(file_name):imagelist = []for parent, dirnames, filenames in os.walk(file_name):for filename in filenames:if filename.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')):imagelist.append(os.path.join(parent, filename))return imagelist,filenames

只遍历当前文件或者只遍历当前文件夹

def GetDirectory(path):directory=os.listdir(path)directory_list=[]for dirs in directory:if not os.path.isfile(os.path.join(path,dirs)):directory_list.append(os.path.join(path,dirs))return directory_list
def GetFile(path):files=os.listdir(path)file_list=[]for file in files:if os.path.isfile(os.path.join(path,file)):file_list.append(os.path.join(path,file))return file_list

和上段代码的功能类似,遍历根目录下的所有文件夹和文件,只是这个是组个遍历,可以人为的调整和修改:

def preprocess(src_root, dst_root):""":param src_root::param dst_root::return:"""if not os.path.isdir(src_root):print("[Err]: invalid source root")returnif not os.path.isdir(dst_root):os.makedirs(dst_root)print("{} made".format(dst_root))# 创建用于训练MOT的目录结构dst_img_dir_train = dst_root + '/images/train'dst_img_dir_test = dst_root + '/images/test'dst_labels_with_ids = dst_root + '/labels_with_ids'if not os.path.isdir(dst_img_dir_train):os.makedirs(dst_img_dir_train)if not os.path.isdir(dst_img_dir_test):os.makedirs(dst_img_dir_test)if not os.path.isdir(dst_labels_with_ids):os.makedirs(dst_labels_with_ids)# 遍历src_root, 进一步完善训练目录并拷贝文件for x in os.listdir(src_root):x_path = src_root + '/' + xif os.path.isdir(x_path):for y in os.listdir(x_path):if y.endswith('.jpg'):y_path = x_path + '/' + yif os.path.isfile(y_path):# 创建用于训练的图片目标目录dst_img1_dir = dst_img_dir_train + '/' + x + '/img1'if not os.path.isdir(dst_img1_dir):os.makedirs(dst_img1_dir)# copy image to train image dirdst_f_path = dst_img1_dir + yif os.path.isfile(dst_f_path):shutil.copy(y_path, dst_img1_dir)print('{} cp to {}'.format(y, dst_img1_dir))else:print('{} already exists.'.format(dst_f_path))

多张图片生成视频代码

import os
import cv2def generate_video(path,size,fps=25):# fps = 24                  #帧率# size = (640, 480)videowriter = cv2.VideoWriter("./resultout/test.mp4",cv2.VideoWriter_fourcc(*'mp4v'),fps,size)#path = r'F:/data/predict_landmark/'for rootpath, dirs, names in os.walk(path):names.sort()for name in names:img = cv2.imread(os.path.join(rootpath, name))print("--", name)videowriter.write(img)videowriter.release()generate_video('./resultout/frame/',(1920, 1080),25)

删除文件和文件夹

需要在执行某些代码前清空指定的文件夹,如果直接用os.remove(),可能出现因文件夹中文件被占用而无法删除,解决方法也很简单,先强制删除文件夹,再重新建同名文件夹即可

import shutil
shutil.rmtree('要清空的文件夹名')
os.mkdir('要清空的文件夹名')

把一个文件从一个文件夹移动到另一个文件夹,并同时重命名,用shutil也很简单

shutil.move('原文件夹/原文件名','目标文件夹/目标文件名')

同理一个文件夹的文件复制到另一个文件夹可以使用下面的代码:

shutil.copy("源目录/文件名", "目的目录/文件名")

数据集元素分割

这里有多种方式,先上一个简单的,然后来一个比较完全的。

import os
import randomdef main():random.seed(0)  # 设置随机种子,保证随机结果可复现files_path = "F:\\车道线大图"assert os.path.exists(files_path), "path: '{}' does not exist.".format(files_path)val_rate = 0.5# 读取数据,并遍历图片名称,通过'.'进行分割字符串,取第一部分,然后排序files_name = sorted([file.split(".")[0] for file in os.listdir(files_path)])files_num = len(files_name)# 生成随机索引,k表示从输入的序列中随机选择k个无重复的元素val_index = random.sample(range(0, files_num), k=int(files_num*val_rate))train_files = []val_files = []for index, file_name in enumerate(files_name):if index in val_index:val_files.append(file_name)else:train_files.append(file_name)try:train_f = open("train.txt", "x")eval_f = open("val.txt", "x")train_f.write("\n".join(train_files))eval_f.write("\n".join(val_files))except FileExistsError as e:print(e)exit(1)
'''
Description: 学习使用
Version: 1.0
Author: 赵守风
Email: 1583769112@qq.com
Date: 2021-03-24 14:17:19
LastEditors: zsf
LastEditTime: 2021-03-24 17:06:01
'''import torch
import os
import random
import shutil
import math'''
@description: 直接切分数据集,copy数据到对应的训练集、测试集和验证集,这里不考虑类别的问题
@param {*} datapath: 原始数据路径
@param {*} rootpath: 保存切分后的路径root
@param {*} train_rate: 训练集占总数的百分比
@param {*} val_rate: 验证集占总数百分比
@param {*} test_rate: 测试集占总数的百分比
@return {*}
@author: zsf
'''
def data_split(datapath, rootpath="./data_split", train_rate=0.8, val_rate=0.1, test_rate=0.1):for parent, dirnames, filenames in os.walk(datapath):for dirname in dirnames:filepaths = os.listdir(os.path.join(parent, dirname))# 删除其他的文件filepaths = [x for x in filepaths if x.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')) ]           # 开始切分random.shuffle(filepaths)    for i in range(len(filepaths)):if i < math.floor(train_rate*len(filepaths)):sub_path = os.path.join(rootpath, 'train_set', dirname)elif i < math.floor((train_rate+val_rate)*len(filepaths)):sub_path = os.path.join(rootpath, 'val_set', dirname)elif i < len(filepaths):sub_path = os.path.join(rootpath, 'test_set', dirname)if os.path.exists(sub_path) == 0:os.makedirs(sub_path)shutil.copy(os.path.join(datapath, dirname, filepaths[i]), os.path.join(sub_path, filepaths[i]))   # 复制图片,从源到目的地'''
@description: 这里生成对应的txt文件不挪动图片
@param {*} datapath: 原始数据路径
@param {*} rootpath: 保存切分后的路径root
@param {*} train_rate: 训练集占总数的百分比
@param {*} val_rate: 验证集占总数百分比
@param {*} test_rate: 测试集占总数的百分比
@return {*}
@author: zsf
'''
def data_split_txt(datapath, rootpath="./data_split", train_rate=0.8, val_rate=0.1, test_rate=0.1):for parent, dirnames, filenames in os.walk(datapath):index = 0for dirname in dirnames:filepaths = os.listdir(os.path.join(parent, dirname))# 删除其他的文件filepaths = [x for x in filepaths if x.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')) ]           # 开始切分random.shuffle(filepaths)    for i in range(len(filepaths)):if i < math.floor(train_rate*len(filepaths)):txt_path = 'train_set.txt'elif i < math.floor((train_rate+val_rate)*len(filepaths)):txt_path = 'val_set.txt'elif i < len(filepaths):txt_path = 'test_set.txt'with open(os.path.join(rootpath, txt_path), mode='a') as file:file.write(str(index) + ' ' + os.path.join(datapath, dirname, filepaths[i]) + '\n')     index += 1 

一张图片均匀切割

import os
from PIL import Image
path="D:\\SR\\USRNet-master\\USRNet-master\\testsets\\image\\20.jpg"
smallpath='D:\\SR\\USRNet-master\\USRNet-master\\testsets\\small'
def splitimage(src, rownum, colnum, dstpath):img = Image.open(src)w, h = img.sizeif rownum <= h and colnum <= w:print('Original image info: %sx%s, %s, %s' % (w, h, img.format, img.mode))print('开始处理图片切割, 请稍候...')s = os.path.split(src)if dstpath == '':dstpath = s[0]fn = s[1].split('.')basename = fn[0]ext = fn[-1]num = 0rowheight = h // rownumcolwidth = w // colnumfor r in range(rownum):for c in range(colnum):box = (c * colwidth, r * rowheight, (c + 1) * colwidth, (r + 1) * rowheight)p = os.path.join(dstpath, basename + '_' + str(num) + '.' + ext)img.crop(box).save(p)num = num + 1print("all = {}, num = {}".format(rownum*colnum, num))print('图片切割完毕,共生成 %s 张小图片。' % num)else:print('不合法的行列切割参数!')splitimage(path, 10, 10, smallpath)

视频转图片

cap = cv2.VideoCapture('D:/SR/src/2.mp4')
i =0
while(1):ret, frame = cap.read()#cv2.imshow("image",frame)cv2.imwrite("D:/SR/USRNet-master/USRNet-master/testsets/image/"+str(i)+'.jpg',frame)i+=1

路径字符串处理

def save_image(output_dir, image_path):if not os.path.exists(output_dir):os.makedirs(output_dir)image_name = os.path.split(image_path)[-1]name, ext = os.path.splitext(image_name)return os.path.join(output_dir, "{}".format(name)) + ext

两种文件缺少彼此的进行互删,如jpg对应xml文件,有时候会缺少jpg或者xml,需要删除多余的

import osimport shutil
imagelist=[]
for parent, dirnames, filenames in os.walk("E:\\MOTdata\\helmet_20210908\\data1"):for filename in filenames:if filename.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')):path = os.path.join(parent, filename)print(filename[:-4]+".json")if filename[:-4]+".json" not in filenames:os.remove(path)jsonlist=[]
for parent, dirnames, filenames in os.walk("E:\\MOTdata\\helmet_20210908\\data1"):for filename in filenames:if filename.lower().endswith(('.json')):path = os.path.join(parent, filename)if filename[:-5]+".jpg" not in filenames:os.remove(path)

python常用程序代码(持续更新收集)相关推荐

  1. python常用函数(持续更新)

    1.abs() abs是 absolute 的缩写,它会返回数字的绝对值. abs(-3.14) 3.14 2.any() any()函数用于判断给定的可迭代参数是否全部为False.如全为False ...

  2. 程序员常用英语积累---持续更新

    程序员常用英语积累---持续更新: Distribution: 分发 Direction    : 方向 Description: 描述 Destination: 目标 Definition   : ...

  3. Matlab常用代码---持续更新

    Matlab中的一些常用代码---持续更新 1. 获取当前的工作目录路径:添加文件夹到工作路径 2. 获取某个.m文件的绝对路径 3. 使用随机颜色进行可视化 1. 获取当前的工作目录路径:添加文件夹 ...

  4. Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)

    Android开发人员不得不收集的代码(持续更新中) Blankj 关注 2016.07.31 04:22* 字数 370 阅读 102644评论 479喜欢 3033赞赏 14 utilcode D ...

  5. Python常用库 - 【持续整理归档】

    Python常用库 - [持续整理归档],比较多,会逐步慢慢细化分类和扩从python常用库.(最后更新:2020-4-8) 为方便Python开发人员进行敏捷开发,高效的完成工作需求,耗时很久整理的 ...

  6. 工具篇:Git与Github+GitLib常用操作(不定期持续更新)

    工具篇:Git与Github+GitLib常用操作(不定期持续更新) 前言: 写这个主要是打算自己用的,里边很多东西都是只要我自己看得懂,但是用了两个星期发现真是越用越简单,越用越好用,私以为得到了学 ...

  7. 安卓代码中常用的代码以及问题收集

    EnglishVersion ->_->:https://raw.githubusercontent.com/jiang111/awesome-android-tips/master/RE ...

  8. linux常用指令(持续更新)

    linux常用指令(持续更新) 基本访问指令: 直接进入用户的home目录: cd ~ 进入上一个目录: cd - 进入当前目录的上一层目录: cd .. 进入当前目录的上两层目录: cd ../.. ...

  9. Android常用开发网址(持续更新)

    2019独角兽企业重金招聘Python工程师标准>>> Android常用开发网址(持续更新) 环境搭建 android镜像 http://www.androiddevtools.c ...

最新文章

  1. java 两个stream合并_Java Stream 流如何进行合并操作
  2. lenet pytorch 官方demo学习笔记
  3. Servlet 过滤器
  4. ORACLE ROLLUP CUBE
  5. sql多表查询之一:Where 和 On的秘密
  6. acwing221 龙哥的问题
  7. Spring Cloud与微服务学习总结(6)——认证鉴权与API权限控制在微服务架构中的设计与实现(四)
  8. Spring Boot入门(4)-事务管理
  9. 二分插入排序(折半插入排序)--排序算法(六)
  10. 【Matlab】mat2cell用法
  11. PS样机字体特效教程-喷漆文字
  12. eclipse 安装 阿里代码规范检测插件
  13. matlab卡方拟合优度检验,卡方拟合优度检验在教学中的应用及Matlab实现_刘泽显...
  14. B站傅希鸣-ElasticSearch学习笔记(ES 入门)
  15. snes :fe4 rom hack for the graphic and animate #1
  16. Spring Cloud实战(三)-监控中心
  17. 在win10查看本机linux的文件,在Windows 10中本机使用Linux的技巧
  18. 在 Flutter 中实现文字动画
  19. Internet Information Services 5.0 技术概述(转)
  20. 使用Python从头开始手写回归树

热门文章

  1. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件
  2. 问题二:用C++输出第一张图片
  3. java比c,Java比C ++更好
  4. 7-2 修理牧场 (25 分)
  5. 如何选择大数据软件开发公司
  6. 大数据是如何作用于实体经济
  7. python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
  8. MangataのACM模板
  9. 设置时间同步(ntp)详细步骤
  10. UVALive 3401 彩色立方体