首页 > 编程语言 >多线程搜索文件拷贝-Python脚本

多线程搜索文件拷贝-Python脚本

时间:2024-09-19 22:24:46浏览次数:8  
标签:search thread Python destination file path 拷贝 多线程 folder

单线程的文件拷贝太折磨人了,所以这里使用多线程的方式去拉满软件效率

import os
import shutil
import threading
import queue

class FileItem:
    """自定义文件对象类,用于存储文件路径和命名序号"""
    def __init__(self, path, index):
        self.path = path
        self.index = index

# 全局变量
file_queue = queue.Queue()
search_completed = False  # 标记搜索线程是否完成
lock = threading.Lock()

def search_bmp_images(source_folder):
    """搜索文件夹及其子文件夹中的所有 BMP 文件并将其放入队列中"""
    count = 1  # 用于命名文件的计数器
    for dirpath, _, filenames in os.walk(source_folder):
        for filename in filenames:
            if filename.lower().endswith('.bmp'):
                file_item = FileItem(os.path.join(dirpath, filename), count)
                file_queue.put(file_item)
                count += 1
    global search_completed
    search_completed = True  # 标记搜索完成

def copy_bmp_image(destination_folder):
    """从队列中取出 BMP 文件并复制到目标文件夹"""
    while True:
        if not file_queue.empty():
            file_item = file_queue.get()
            destination_file = os.path.join(destination_folder, f'{file_item.index}.bmp')
            shutil.copy(file_item.path, destination_file)
            print(f'已复制: {file_item.path} 到 {destination_file}')
            file_queue.task_done()
        elif search_completed:  # 如果搜索完成且队列为空,则退出
            break

def main(source_folder, destination_folder, num_workers):
    # 确保目标文件夹存在
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)

    # 启动搜索线程
    search_thread = threading.Thread(target=search_bmp_images, args=(source_folder,))
    search_thread.start()

    # 启动多个复制线程
    threads = []
    for _ in range(num_workers):
        thread = threading.Thread(target=copy_bmp_image, args=(destination_folder,))
        thread.start()
        threads.append(thread)

    # 等待搜索线程完成
    search_thread.join()

    # 等待所有复制线程完成
    for thread in threads:
        thread.join()

source_folder = './search/'  # 替换为源文件夹的路径
destination_folder = './imgs/'  # 替换为目标文件夹的路径
num_workers = 4  # 设置工作线程数

main(source_folder, destination_folder, num_workers)

标签:search,thread,Python,destination,file,path,拷贝,多线程,folder
From: https://www.cnblogs.com/ziyuhaokun/p/18421495

相关文章

  • python爬虫连载23
    HTTP协议HTTP协议(HyperTextTransferProtocol超文本传输协议)用于从服务器和客户端传输数据。HTTP请求l HTTP请求永远是客户端发起,服务器端响应。l HTTP请求时无状态的,即这一次的请求和任何其他次请求都没有关系。一次HTTP操作是一次事务。l HTTP请求步骤:1建立客户端和服务......
  • 基于MicroPython的Raspberry Pi Pico控制LED灯闪烁的设计方案
       以下是一个基于MicroPython的RaspberryPiPico控制LED灯闪烁的设计方案:一、硬件准备:1. RaspberryPiPico开发板2. 一个LED灯3. 一个220Ω4. 杜邦线若干。5.3.3V直流电源二、硬件连接:1.将Pico开发板的VSYS连接到3.3V直流电源的正极,开发板的GND引脚连......
  • python+flask计算机毕业设计景区民宿网上预约系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,景区民宿作为一种融合了当地文化、自然风光与个性化服务的住宿形式,越来越受到游客的青睐。然而,传统民宿预订方式往往......
  • python+flask计算机毕业设计简逸家政服务平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,随着家庭结构的变化和生活水平的提高,家政服务需求日益增长,成为连接家庭与社会服务的重要桥梁。然而,传统家政服务行业......
  • JavaSE——多线程基础
    概述        现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时允许多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。    CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操......
  • python获取当前目录路径和文件
    一、获取当前路径1、使用sys.argv[0]importsysprintsys.argv[0]#输出#本地路径2、os模块importosprintos.getcwd()#获取当前工作目录路径printos.path.abspath('.')#获取当前文件目录路径printos.path.abspath('test.txt')#获取当前目录文件下......
  • 100天学Python, 从菜鸟到大佬!
    有很多成功的人,他们都在奋斗,最后得到了一个好结果。但是却没有看到他们奋斗的历程,我们看到也都是最后的结果。坚持努力奋斗100天,自己到底会有什么变化呢?在此定下自己的目标:用100天搞定python! 为什么是100天,世界上很多东西是无法通过投机取巧的方式获得的,买不来、要不来、抢......
  • 全面升级:网工Python的最佳实践
    在如今丰富的Python教学资源中,为网络工程师量身打造的计算机网络运维方面的Python教学书籍却相当匮乏。市面上有部分以NetDevOps为主题,讲解网络运维自动化技术的书籍。如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀!点击领取(不要米米)这类......
  • 20个Python3实战项目代码,让你分分钟晋级大神!
    “读”代码是不能给你带来任何收益的,正如“读书”一样,如果在读的时候你不琢磨,保管你读完仨月准忘了一大半。真正需要的是去“试”代码,动手去调调代码,改改这改改那,看看把A变成B这个代码的结果会有什么变化。高效学习源代码的步骤:1.运行程序,观察表现2.运行源码,断点调试,从头跟......
  • 创建和管理Python的虚拟环境,从而实现隔离项目依赖和简化项目管理。
    在Python中,创建和管理虚拟环境可以使用以下工具:venv:Python自带的虚拟环境模块。virtualenv:一个独立于系统Python的虚拟环境工具,功能更丰富。conda:Anaconda发行版中的环境管理工具,适用于科学计算和数据科学。下面是使用这三种工具的基本步骤:使用venvvenv是Python3.3+中......