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

news2025/1/13 3:32:53

说明

  平时偶尔需要进行重复性的对文件进行重命名、格式转化等。假设以文件复制功能作为目标,设计一个小程序使用多线程对文件进行批量复制。(其实以后主要目标是针对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 = files
        self.source_path = source_path
        self.target_path = target_path
	
    def run(self) -> None:
        import shutil

        while self.process_nums < self.get_all_nums():
            if self.target_path is None:
                pass
                time.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 += 1

    def get_process_nums(self):
        return self.process_nums

    def get_all_nums(self):
        return self.all_nums


if __name__ == "__main__":
    source_path = "D:\\SharedFolders\\DataSets\\office_room_traj0_loop\\rgb"
    target_path = ""
	# 获取需要批量处理的目录中的文件
    source_file = os.listdir(source_path)
	# 根据线程数量,计算每个线程负责处理文件数量
    thread_nums = 3
    nums_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 = 0
        process_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 += 1
            else:
                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:
            break

    print("[status]:success")

使用示例

运行中

运行完毕

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

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

相关文章

深度学习 精选笔记(12)卷积神经网络-理论基础2

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

修改yolov9的模型打印不出来Gflops的解决办法

正在修改yolov9的模块&#xff0c;发现修改后的模型没有GFlops这个参数 解决办法&#xff1a; 找到utils/torch_utils.py这个文件&#xff0c;有一个model_info函数 然后将其中的stride改为固定的640就可以打印了。 stride max(int(model.stride.max()), 32) if hasattr(mo…

扩展学习|网络问政的价值增量与实现条件:基于数据资源挖掘的视角

文献来源&#xff1a;[1]顾丹丹傅广宛.网络问政的价值增量与实现条件:基于数据资源挖掘的视角[J].中国行政管理, 2021, 000(004):76-82.DOI:10.19735/j.issn.1006-0863.2021.04.11. 一、技术赋能网络问政的机制生成 &#xff08;一&#xff09;技术赋能网络问政的流程&#xf…

关于IP-Adapter的十几个模型,到底是干啥用的?

&#x1f3a0;背景介绍 IP-Adapter的一系列模型在stable diffusion的实际应用中&#xff0c;越来越被频繁的使用到&#xff0c;用于“换脸”或者“保证角色的一致性”&#xff0c;但是很多朋友在安装或者使用别人的工作流的时候&#xff0c;经常会遇到各种各样的问题&#xff…

【JavaScript】JavaScript 运算符 ⑤ ( 赋值运算符 | 基础赋值运算符 与 复合赋值运算符 )

文章目录 一、JavaScript 赋值运算符1、赋值运算符 概念2、基础赋值运算符 与 复合赋值运算符3、复合赋值运算符4、完整代码示例 一、JavaScript 赋值运算符 JavaScript 赋值运算符种类 : 基础赋值运算符 : 等于 : ; 复合赋值运算符 : 加等 : 减等 : -乘等 : *除等 : /取模等…

开启Safari手势支持

在使用Safari 的时候&#xff0c;大家有没有觉得不支持手势使用起来不是很方便&#xff0c; 触摸板只支持少量简单的手势&#xff0c;如缩放&#xff0c;滚动等。如果使用鼠标的用户&#xff0c;则完全无法使用手势。经过折腾研究&#xff0c;使用CirMenu应用可以完美解决这个要…

RAID技术知识详解到RAID 10的linux实现过程

1.RAID技术简介 RAID&#xff08;Redundant Array of Independent Disks&#xff09;独立磁盘冗余阵列。通俗来说就是将多个硬盘通过软件或硬件结合成虚拟单台大容量的硬盘使用。 RAID技术的特点&#xff1a; 可以自动检测故障硬盘&#xff1b; 可以重建硬盘坏道的资料&…

VBA批量绘制动态化数据图表

对于大多数使用的VBA的人来说&#xff0c;处理excel工作簿中批量数据是日常工作中常见的情形&#xff0c;但与此同时&#xff0c;VBA在批量绘图方面同样有简洁快速的特点。 说起Excel画图表&#xff0c;考虑一个问题&#xff0c;excel图表的本质是什么&#xff1f;很多人会不假…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序&#xff0c;就可以购买需要的商品&#xff0c;可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**&#xff1a;展示便利店的商品信息&#xff0c;包括…

【C++刷题】优选算法——动态规划第一辑

1.状态表示是什么&#xff1f;简答理解是dp表里的值所表示的含义怎么来的&#xff1f;题目要求经验题目要求分析问题的过程中&#xff0c;发现重复子问题 2.状态转移方程dp[i]......细节问题&#xff1a;3.初始化控制填表的时候不越界4.填表顺序控制在填写当前状态的时候&#…

windows下修改mysql的max_allowed_packet的值

1)C:\Program Files\MySQL\MySQL Server 5.7 在MySQL 的安装目录下添加my.ini文件&#xff0c;同时添加空的data文件 2&#xff09;my.ini文件内容如下&#xff0c; [mysqld] port 3306 basedirC:\Program Files\MySQL\MySQL Server 5.7 datadirC:\Program Files\MySQL\MySQ…

软考78-上午题-【面向对象技术3-设计模式】-结构型设计模式01

一、适配器模式 1-1、意图 个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 1-2、结构 适配器模式分为&#xff1a; 1、适配器类模式&#xff1b; 2、适配器对象模式 类适配器使用多重继承对一个接口与另…

java基础(6) IO[下] 线程(补充) XML Servlet

输出流 OutputStream OutputStream是Java标准库提供的最基本的输出流。 和InputStream类似&#xff0c;OutputStream也是抽象类&#xff0c;它是所有输出流的超类。这个抽象类定义的一个最重要的方法就是void write(int b) public abstract void write(int b) throws IOExcep…

html--宠物

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

Javascript抓取京东、淘宝商品数据(商品采集商品详情图片抓取)

之前用的方法&#xff1a; let temp []var lists $(#J_goodsList li.gl-item)$.each(lists,function(idx,item){ temp.push({ id:$(item).data(sku), goods_img:$(item).find(img).attr(src), goods_name:$(item).find(.p-name em).text(), market_price:$(item).fi…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享

一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展&#xff0c;多媒体数据呈现海量增长 的趋势&#xff0c;使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据&#xff0c;也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…

洛谷P8972 『GROI-R1』 一切都已过去(树上前缀和+运算符重载)

『GROI-R1』 一切都已过去 题目背景 悦关上窗&#xff0c;拉上帘布。 果然还是想不起来啊。 隐约记得曾和什么人一起做过这样的事。 仰面躺下&#xff0c;手执一只木笺。 「究竟如何&#xff0c;才能拥有“过去”啊……」 她闭上双眼。 「6 岁前的记忆……究竟如何才能…

ConsiStory:Training-Free的主体一致性生成

Overview 一、总览二、PPT详解 ConsiStory 一、总览 题目&#xff1a; Training-Free Consistent Text-to-Image Generation 机构&#xff1a;NVIDIA, Tel-Aviv University 论文&#xff1a;https://arxiv.org/pdf/2402.03286.pdf 代码&#xff1a;https://consistory-paper.g…

Python自动获取指定上市公司的所有财务数据(资产负债表,利润表,现金流量表)

案例背景 很多经管类同学找财务数据都很困难&#xff0c;去找一个个查找特定的公司&#xff0c;然后又要去同花顺或者东方财富网一年一年的去查看报表&#xff0c;一年一年的数据一个个填入...太慢了。 tushare能获取金融数据的接口&#xff0c;他有资产负债表&#xff0c;利…

idea warning:java源值已过时将在未来所有发行版中删除

在idea中运行maven项目 如果出现idea warning:java源值已过时将在未来所有发行版中删除&#xff0c;详见如下截图所示&#xff1a; 注意&#xff1a;jdk8 要解决这个警告需要设置3个地方 首先打开File->Project Structure中的Project&#xff0c;将SDK和language level都设…