Python 多线程大批量处理文件小程序

说明

  平时偶尔需要进行重复性的对文件进行重命名、格式转化等。假设以文件复制功能作为目标,设计一个小程序使用多线程对文件进行批量复制。(其实以后主要目标是针对Realsense的raw文件进行批量的转化,并借助多线程加速)

代码

import threading
import os
import time# 多线程类
# 更改__init__和run供自己使用
class FileProcess(threading.Thread):process_nums: int = 0 #外部查看进度使用all_nums: int = 0 #记录总数量source_path = ""target_path = ""files = []def __init__(self, source_path: str, files: list, target_path: str = None):super().__init__()self.all_nums = len(files)self.files = filesself.source_path = source_pathself.target_path = target_pathdef run(self) -> None:import shutilwhile self.process_nums < self.get_all_nums():if self.target_path is None:passtime.sleep(0.1)else:shutil.copyfile(os.path.join(self.source_path, self.files[self.process_nums]),os.path.join(self.target_path, self.files[self.process_nums]),)self.process_nums += 1def get_process_nums(self):return self.process_numsdef get_all_nums(self):return self.all_numsif __name__ == "__main__":source_path = "D:\\SharedFolders\\DataSets\\office_room_traj0_loop\\rgb"target_path = ""# 获取需要批量处理的目录中的文件source_file = os.listdir(source_path)# 根据线程数量,计算每个线程负责处理文件数量thread_nums = 3nums_step = int(len(source_file) / 3)# 初始化线程thread_list = []process_list_nums = []for i in range(thread_nums):if i == 0:thread_list.append(FileProcess(source_path=source_path, files=source_file[:nums_step]))process_list_nums.append(len(source_file[:nums_step]))elif i == thread_nums - 1:thread_list.append(FileProcess(source_path=source_path, files=source_file[nums_step * i :]))process_list_nums.append(len(source_file[nums_step * i :]))else:thread_list.append(FileProcess(source_path=source_path,files=source_file[nums_step * i : nums_step * i + nums_step],))process_list_nums.append(len(source_file[nums_step * i : nums_step * i + nums_step]))# 启动线程for i in range(thread_nums):thread_list[i].start()print("[status]:start")print("\n" * thread_nums, end="")while True:all_end = 0process_nums = []time.sleep(0.5)for i in range(thread_nums):if thread_list[i].is_alive():process_nums.append(thread_list[i].get_process_nums())all_end += 1else:process_nums.append(process_list_nums[i])# 进度显示部分print("\033[{}F".format(thread_nums), end="") # 光标移动到上面n行开头部位print("\033[0J", end="") # 从光标位置开始删除内容,一直到结尾for i in range(thread_nums):print("[status]:thread {}:{}/{} {:.2f}%".format(i + 1,process_nums[i],process_list_nums[i],process_nums[i] * 100 / process_list_nums[i],))# 所有线程结束则退出if all_end == 0:breakprint("[status]:success")

使用示例

运行中

运行完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uv 必备的工具 ps ai 全家桶合集

非常稀有的资源 &#xff0c;必应搜索 易品资源yipinziyuan 可以找到

sqllab第二十关通关笔记

知识点&#xff1a; cookie注入 可以进行url解析错误注入传参位置 get请求post请求cookie传参 输入admin admin进行登录&#xff0c;抓取当前数据包 通过放包发现是一个302跳转的响应包&#xff0c;页面只有一个 I Love Cookies&#xff1b;没什么信息 通过点击页面上方的按钮…

若你有才能,最好能遇上识才之人,高俅发迹的故事很好诠释了千里马与伯乐的关系

若你有才能&#xff0c;最好能遇上识才之人&#xff0c;高俅发迹的故事很好诠释了千里马与伯乐的关系 其实&#xff0c;“千里马”和“伯乐”都是中国古代传说里的角色。伯乐是古代一个善于相马&#xff08;识别马的好坏&#xff09;的人&#xff0c;而“千里马”则是指一匹能跑…

数通-路由技术基础介绍

自治系统——AS&#xff1b;LAN和广播域&#xff1b;CN-2——精品线路 路由器互联网段为同网段&#xff08;不同网段会造成三层不通&#xff0c;非直连则不会产生直连路由&#xff09; 路由选路&#xff0c;一个路由器的各个接口不能配置相同网段。 IP路由表&#xff1a;例&…

前端学习之css样式 背景样式、字体样式、列表样式、边框样式、内外边距元素属性的转换

背景样式 html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>背景样式</title><link rel"stylesheet" href"../css/3.1背景样式.css"> </head> <bo…

华为云APIG跨域资源共享方案

## 浏览器的同源策略 浏览器的同源策略是一种安全机制&#xff0c;旨在保护用户的信息安全和隐私。它限制了一个网页的脚本只能与来自同一源的资源进行交互&#xff0c;即同源策略要求页面中加载的所有资源&#xff08;包括脚本、样式表、图片等&#xff09;必须来自相同的**域…

python之万花尺

1、使用模块 import sys, random, argparse import numpy as np import math import turtle import random from PIL import Image from datetime import datetime from math import gcd 依次使用pip下载即可 2、代码 import sys, random, argparse import numpy as np imp…

通俗易懂的Python循环讲解

循环用于重复执行一些程序块。从上一讲的选择结构&#xff0c;我们已经看到了如何用缩进来表示程序块的隶属关系。循环也会用到类似的写法。 for循环 for循环需要预先设定好循环的次数(n)&#xff0c;然后执行隶属于for的语句n次。 基本构造是 for 元素 in 序列: statemen…

【设计模式】Java 设计模式之装饰者模式(Decorator)

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许用户通过在一个对象上动态地添加一些职责来增强其功能。这种模式将对象的核心职责与装饰功能分开&#xff0c;使得用户可以在运行时根据需要添加或删除装饰功能。 一、装饰者模式概…

进程间通信——匿名管道

匿名管道代码实现&#xff1a; #include <iostream> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <string> using namespace std; int main() {int fd[2…

云原生 IaaS 服务:构建下一代云计算基础设施

随着云计算技术的不断演进&#xff0c;云原生成为了现代应用开发和部署的主流趋势。在当今这个快速变化的数字化时代&#xff0c;企业越来越需要灵活、可伸缩、自动化的基础设施来支持他们的业务需求。而云原生 IaaS&#xff08;Infrastructure as a Service&#xff09;服务则…

python--scrapy 保存数据到 mongodb

第一步&#xff0c;settings.py添加 ITEM_PIPELINES {# scrapy_runklist.pipelines.ScrapyRunklistPipeline: 300,scrapy_runklist.pipelines.ScrapyWeiBoPipeline: 300, }# mongodb配置 MONGO_HOST "127.0.0.1" # 主机IP MONGO_PORT 27017 # 端口号 MONGO_DB …

2023蓝桥杯省赛真题分糖果 |枚举+DFS

题目链接&#xff1a; 2.分糖果 - 蓝桥云课 (lanqiao.cn) 说明&#xff1a; 虽然这道题并不是很难&#xff0c;思维上也不是特别难&#xff0c;数据小直接暴力就可以得到。但是还是需要注意一些细节&#xff0c;比如DFS的递归终止的条件的处理&#xff0c;当K>7的时候就要…

【TypeScript系列】声明合并

声明合并 介绍 TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。 对本文件来讲,“声明合并”是指编…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

程序员如何规划职业赛道?

在快速发展的信息技术时代&#xff0c;程序员作为数字世界的构建者&#xff0c;面临着前所未有的职业选择和发展机会。选择合适的职业赛道&#xff0c;不仅关乎个人职业发展的高度和速度&#xff0c;更影响着个人职业生涯的满意度和幸福感。本文将从自我评估与兴趣探索、市场需…

MySQL的启停登陆与退出

启动和停用MySQL服务 sudo /usr/local/mysql/support-files/mysql.server startsudo /usr/local/mysql/support-files/mysql.server stop登陆MySQL 1. mysql -uroot -p密码 2. mysql -h127.0.0.1 -uroot -p目标密码 3. mysql --host127.0.0.1 --userroot --password目标密码退…

[HDCTF 2023]enc

32位 这里后面运行这个程序居然要 Visual Studio&#xff0c;不然运行不了 IDA打开&#xff0c;直接锁定main函数 看见v9&#xff0c;四个32位&#xff0c;就想到了tea加密 、 标准tea from ctypes import * #tea def decrypt(v, k):v0 c_uint32(v[0])v1 c_uint32(v[1])…

代码随想录阅读笔记-字符串【反转字符串】

题目 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印…

未来已来:科技驱动的教育变革

我们的基础教育数百年来一成不变。学生们齐聚在一个物理空间&#xff0c;听老师现场授课。每节课时长和节奏几乎一致&#xff0c;严格按照课表进行。老师就像“讲台上的圣人”。这种模式千篇一律&#xff0c;并不适用于所有人。学生遇到不懂的问题&#xff0c;只能自己摸索或者…