当前位置: 首页 > news >正文

python 线程池处理文件

使用多线程来加速文件复制的过程,可以使用Python的concurrent.futures模块中的ThreadPoolExecutor。代码如下:

import glob
import os
import shutil
from concurrent.futures import ThreadPoolExecutordef copy_image(image):imagepath = image.replace("\\", "/")# 假设文件名格式为:xxx_yyy.jpg,其中xxx是我们想要的部分,yyy是日期或编号# 我们只取文件名中的xxx和扩展名.jpg,并用目录名替换掉日期或编号imagename = imagepath.split('/')[-1].split('_')[0] + "_" + imagepath.split('/')[-2].split('.')[-1]new_path = os.path.join('image', imagename + '.jpg')shutil.copy(imagepath, new_path)print(imagepath)def main():img_list = glob.glob('D:/911/*/*.jpg')os.makedirs('image', exist_ok=True)# 使用 ThreadPoolExecutor 来并行处理文件复制with ThreadPoolExecutor(max_workers=20) as executor:  # 可以调整max_workers的数量以适应你的CPU和IO性能executor.map(copy_image, img_list)if __name__ == "__main__":main()

为了使用多线程来加速文件复制的过程,你可以使用Python的concurrent.futures模块中的ThreadPoolExecutor。这个模块允许你轻松地并行执行多个任务。以下是你的代码的多线程版本:

import glob
import os
import shutil
from concurrent.futures import ThreadPoolExecutordef copy_image(image):imagepath = image.replace("\\", "/")# 假设文件名格式为:xxx_yyy.jpg,其中xxx是我们想要的部分,yyy是日期或编号# 我们只取文件名中的xxx和扩展名.jpg,并用目录名替换掉日期或编号imagename = imagepath.split('/')[-1].split('_')[0] + "_" + imagepath.split('/')[-2].split('.')[-1]new_path = os.path.join('image', imagename + '.jpg')shutil.copy(imagepath, new_path)def main():img_list = glob.glob('D:/caohejing_20240711/*/*.jpg')os.makedirs('image', exist_ok=True)# 使用 ThreadPoolExecutor 来并行处理文件复制with ThreadPoolExecutor(max_workers=10) as executor:  # 可以调整max_workers的数量以适应你的CPU和IO性能executor.map(copy_image, img_list)if __name__ == "__main__":main()

代码说明:

  1. 函数copy_image:这个函数接受一个图片路径作为参数,然后执行复制操作。它首先修改路径分隔符,然后解析文件名并构建新的文件名和路径,最后使用shutil.copy复制文件。

  2. 函数main:这是主函数,它首先获取所有图片的路径,然后创建一个名为image的目录(如果它不存在的话)。之后,它使用ThreadPoolExecutor来并行地执行copy_image函数,其中executor.map类似于map函数,但是它会并行地应用给定的函数到可迭代对象中的每个元素。

  3. __name__ == "__main__":这是Python的标准做法,用来判断该脚本是直接运行还是被导入到其他脚本中作为模块。直接运行时,会执行main函数。

  4. max_workers:这是ThreadPoolExecutor的一个参数,它决定了线程池中的线程数量。你可以根据你的CPU核心数和IO操作的需求来调整这个值。在这个例子中,我使用了10,但你应该根据你的具体环境来设置这个值。

注意:虽然多线程可以提高IO密集型任务的效率,但每个线程的创建和销毁都需要一定的开销。此外,由于Python的全局解释器锁(GIL),多线程在CPU密集型任务上可能不会带来太大的性能提升。然而,对于文件复制这样的IO密集型任务,多线程是非常有用的。

多线程修改json文件

import json
import glob
from concurrent.futures import ThreadPoolExecutorlabelme_path = "../Labelme_data/"# 定义一个函数来处理单个文件
def process_file(file_path):with open(file_path, "r", encoding="utf-8") as f:json_file = json.load(f)shapes = json_file['shapes']print(shapes)for shape in shapes:if shape['label'] == 'f16':shape['label'] = 'person'elif shape['label'] == 'f35':shape['label'] = 'other'with open(file_path, 'w') as f:json.dump(json_file, f, indent=4)# 3. 获取待处理文件files = glob.glob(labelme_path + "*.json")# 使用ThreadPoolExecutor来并行处理文件
with ThreadPoolExecutor(max_workers=40) as executor:  # 可以根据机器性能调整max_workersexecutor.map(process_file, files)print("所有文件处理完成。")

相关文章:

python 线程池处理文件

使用多线程来加速文件复制的过程,可以使用Python的concurrent.futures模块中的ThreadPoolExecutor。代码如下: import glob import os import shutil from concurrent.futures import ThreadPoolExecutordef copy_image(image):imagepath image.replace…...

AI技术和大模型对人才市场的影响

012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势,以下是一些关键的技术方向和特点: 1. 生成式AI 生成式AI(Generative AI)在2024年继续快速发展,它能够创造全新的内容,而不仅仅…...

解释“location”和“position”

Explanation of “Location” and “Position” Location and position are terms often used interchangeably in everyday language, but they can have distinct meanings depending on the context. Below, we explore their definitions, differences, and examples of u…...

Netty 必知必会(三)—— ByteBuf

Netty ByteBuf工作原理,和NIO里ByteBuffer区别? Java NIO 提供了ByteBuffer 作为它 的字节容器,但是这个类使⽤起来过于复杂,⽽且也有些繁琐。 ByteBuf是Netty框架中的一个关键类,专门设计来处理字节数据,…...

芋道以开源之名行下作之事 恬不知耻 标榜自己开源 公开源码+sql 不用再加入知识星球

资源 链接: https://pan.baidu.com/s/1TeuxbAUfLQ5_BqMBF1kniQ?pwdcqud 提 取码: cqud 依次为后端、补充版的sql、前端 此文档内安装部署等一应俱全...

wordpress中,wp_posts 文章的状态 有哪些,分别对应什么数值

在WordPress中,wp_posts 表存储了网站上的所有内容,包括文章(posts)、页面(pages)、自定义文章类型(custom post types)等。这个表有一个名为 post_status 的字段,用于标…...

输入成绩问题(c语言)

1.问题:期中考试开始了,大家想要取得好成绩,争夺前五名,从键盘输入n个学生成绩(不超过40个),输出每组的前五名的成绩 两行,第一行输入一个整数,表示n个学生(…...

基于域名+基于ip+基于端口的虚拟主机+上线商务系统

一、回顾 1.jdk环境 tomcat服务器需要jdk环境 版本对应 ​ tomcat9>jdk1.8 配置系统变量JAVA_HOME sed -i $aexport JAVA_HOME/usr/local/jdk22/ /etc/profile sed -i $aexport PATH$JAVA_HOME/bin:$PATH /etc/profile ​ source /etc/profile ​ java -version java…...

vue每次路由跳转前将页面滚动到顶部

在Vue.js应用中,特别是使用Vue Router进行页面路由管理时,router.beforeEach是一个非常有用的导航守卫(Navigation Guard)。它允许你在路由跳转之前执行一些逻辑,比如权限验证、页面跳转前的数据加载、滚动位置重置等。…...

【Qt】QDateTimeEdit

在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…...

Redis和Mysql如何保持数据一致性

一般情况下,Redis是用来实现应用和数据库之间读操作得缓存层,主要目的是减少数据库IO,还可以提升数据的IO性能。 当应用程序需要去读取某个数据时,会首先尝试去Redis里面加载,如果命中就直接返回,如果没有…...

Java中Optional相关

Java中Optional相关 orElse 提供默认值以确保不会返回 null。 适用于默认情况下的备选值或简单计算结果。 // 如果 optionalName 为空&#xff0c;返回 "Unknown" Optional<String> optionalName Optional.empty(); String result optionalName.orElse(&q…...

AI在HR候选人关系管理中的革新应用

一、引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;其在人力资源管理&#xff08;HR&#xff09;领域的应用也日益广泛。特别是在候选人关系管理方面&#xff0c;AI技术不仅提高了管理效率&#xff0c;还使得候选人体验得到了极大的改善。本文将深入分…...

HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字+烟花特效)

利用HTMLCSSJavaScript制作了一个简单的七夕表白网页&#xff1a; 这是一个简单的表白功能&#xff0c;可以用于小哥哥小姐姐在情人节向心爱的人表白使用点击信封中间的爱心&#xff0c;会出现一封信由信封向外展开&#xff0c;与此同时会有烟花绽放&#xff0c;并且自动播放背…...

【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)

这是我的第335篇原创文章。 一、引言 决策树是一个有监督分类模型&#xff0c;本质是选择一个最大信息增益的特征值进行输的分割&#xff0c;直到达到结束条件或叶子节点纯度达到阈值。根据分割指标和分割方法&#xff0c;可分为&#xff1a;ID3、C4.5、CART算法。每一种颜色代…...

如何在Python中使用网页抓取API获得Google搜索结果

SERP是搜索引擎结果页的缩写&#xff0c;它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序&#xff0c;把最能解决我们需求的页面展示给我们&#xff0c;企业会非常关注结果页的排序&#xff0c;也就是本企业内容的自然排名情况。手…...

Postman高频面试题及答案汇总(接口测试必备)

Postman在软件测试的面试中&#xff0c;可以说是必考题了&#xff0c;既然是高频考题&#xff0c;当然得为粉丝宝宝们整理一波题库喽~ 一、Postman在工作中使用流程是什么样的&#xff1f; 二、你使用过Postman的哪些功能&#xff1f; 三、Postman如何管理测试环境&#xff…...

JavaEE 初阶(13)——多线程11之“定时器”

目录 一. 什么是“定时器” 二. 标准库的定时器 三. 定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 四. 拓展 一. 什么是“定时器” 定时器是软件开发中的一个重要组件&#xff0c;类似于一个“闹钟”&#xff0…...

2024最新全开源付费进群系统源码二开修复版 支持易支付

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 全开源付费进群系统源码&#xff0c;开源无加密无授权&#xff0c;优化电脑端访问布局&#xff0c;支持dai理&#xff0c;对接易支付通道&#xff0c;dai理可以配置自己易支付接口&am…...

【奥顺苹果CMS二开泛目录4.X版】PHP站群程序新增首页堆砌关键词新增四套seo模板

演示站&#xff08;赠送四套模板&#xff09;&#xff1a; https://macfan.qdwantong.com https://macfan2.qdwantong.com https://macfan3.qdwantong.com https://macfan4.qdwantong.com 4.X版程序特色功能&#xff1a; 后台除了可以设置干扰码、转码、插入符号和拼音这…...

一文读懂水面无人艇:每个硬件模块到底负责什么

目录 一、水面无人艇完整系统 二、硬件搭配负责哪些功能 2.1 艇体模块&#xff1a;决定“能不能稳、能不能装、能不能扛风浪” 2.2 动力与航行执行模块&#xff1a;决定“怎么动” 2.3 导航传感器模块&#xff1a;决定“我现在在哪、朝哪、跑多快” 1&#xff09;GPS / 北…...

Java开发必备:高德、百度、WGS84坐标互转实战(附完整代码)

Java开发实战&#xff1a;高德、百度与WGS84坐标系互转解决方案 当你需要在不同地图服务之间切换时&#xff0c;坐标系的差异往往会成为开发中的痛点。想象一下这样的场景&#xff1a;你的应用同时接入了高德地图和百度地图&#xff0c;用户上传的GPS数据却无法在两个平台上准确…...

Vulkan与OpenGL深度解析——现代图形渲染的技术演进

1. 从OpenGL到Vulkan&#xff1a;图形渲染的进化之路 还记得我第一次接触图形编程时&#xff0c;OpenGL就像一位和蔼的老教授&#xff0c;把复杂的GPU操作封装成简单的API调用。但随着项目复杂度提升&#xff0c;我逐渐发现这位"老教授"的教学方式有些过时——它隐藏…...

2023最新版Prometheus+Grafana监控系统搭建指南(含Docker-compose部署)

2023云原生监控实战&#xff1a;基于Docker-compose的PrometheusGrafana全栈部署指南 在云原生技术席卷各行各业的今天&#xff0c;监控系统已成为保障业务稳定性的神经中枢。传统监控方案在面对容器化、微服务架构时往往力不从心&#xff0c;而Prometheus作为CNCF毕业项目&…...

ECG-Emotion Recognition(情绪识别)实战指南:WESAD与DREAMER数据集深度解析与应用

1. 情绪识别与ECG技术入门指南 第一次接触ECG情绪识别时&#xff0c;我和大多数人一样充满疑惑&#xff1a;心跳数据真能反映人的情绪&#xff1f;经过三个月的项目实践&#xff0c;我可以肯定地说&#xff0c;ECG信号就像情绪的"心电图"&#xff0c;愤怒时心跳加速、…...

极客专属:OpenClaw+百川2-13B打造个人CLI智能助手

极客专属&#xff1a;OpenClaw百川2-13B打造个人CLI智能助手 1. 为什么开发者需要命令行智能助手 作为一个长期与终端打交道的开发者&#xff0c;我每天要重复执行大量机械操作&#xff1a;查看日志、运行测试、整理结果。这些工作虽然简单&#xff0c;却极其消耗精力。直到我…...

后端/全栈/架构师转战AI大模型开发:可落地规划(建议收藏)

如果你本身是后端、全栈或架构师出身&#xff0c;就意味着你已经手握一套扎实的“确定性系统”构建能力——分布式部署、高并发处理、数据库事务管控、系统稳定性保障&#xff0c;这些都是你转型AI大模型开发的核心底牌&#xff0c;也是纯算法出身从业者难以快速补齐的短板。 而…...

PDF24 Creator离线版隐藏技巧:5个连官网都没说的自动化妙用

PDF24 Creator离线版隐藏技巧&#xff1a;5个连官网都没说的自动化妙用 如果你经常需要处理PDF文档&#xff0c;可能已经听说过PDF24 Creator这款免费工具。但大多数人仅仅停留在基础功能的使用上&#xff0c;比如简单的PDF合并、分割或转换。今天我要分享的是PDF24 Creator离线…...

避坑指南:.NET MAUI页面跳转最常见的5个坑点及解决方案(2023最新版)

.NET MAUI页面导航避坑实战&#xff1a;5个高频问题与工业级解决方案 刚接触.NET MAUI的开发者常会在页面跳转环节踩坑——传参莫名丢失、导航堆栈突然崩溃、模态窗口关闭失效...这些问题往往消耗大量调试时间。本文将结合GitHub高星issue和StackOverflow热帖&#xff0c;拆解5…...

LangGraph实战:从零构建并部署一个多功能智能体

1. LangGraph框架概述&#xff1a;新一代智能体开发范式 在人工智能应用开发领域&#xff0c;智能体&#xff08;Agent&#xff09;技术正经历着从简单问答到复杂任务执行的进化。LangGraph作为LangChain生态中的新一代开发框架&#xff0c;彻底改变了传统链式结构的局限性。我…...