首页 > Python资料 博客日记

【工具分享】基于Python的Windows文件批量查找与复制

2024-08-05 18:00:06Python资料围观78

本篇文章分享【工具分享】基于Python的Windows文件批量查找与复制,对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识

一、Windows文件批量查找复制介绍

当今许多办公室任务需要高效的自动化解决方案来提高生产力,特别是在处理文件和数据时。Python作为一种强大的编程语言,提供了丰富的库和工具,使得开发文件管理工具变得轻而易举。如果你正在寻找一种简单而有效的方式来批量查找和复制Windows文件,那么你来对地方了。本文将介绍如何利用Python编写一个自动化程序,帮助你在Windows系统中轻松管理和复制文件,让你的办公任务更加高效和便捷。

想必很多职场的小伙伴都遇到过一件很苦恼的事,尤其是当文件数量特别大的时候,如果想要按照要求去给庞大的文件分类放入不同的文件夹中去,看似很简单的一件事,奈何Windows文件操作功能不够强大,只能需要我们在搜索框中一个个查找,然后将这些文件放到归类文件夹中去,可数量太庞大了,难免会惹人烦躁,效率也特别低。

比如在一个学校中,有一个文件夹存放了全校学生的电子档案,现在想将这些学生电子档案分别放入学生所在班级的文件夹中去,相必很多人是这样操作的:

想必很多人都会在此搜索框中一个一个地搜索某班级学生的唯一id标识号,然后把这个学生复制到所属班级的文件夹中去。这种工作在学校招生、考试院或者政府工作中经常遇到。学校可能就会安排各班级班主任去查找整理自己班级的学生,这样大家同时工作,每个人负责一部分,会大大减缓工作压力提高工作效率。但这还是远远不够的,如果有一个自动化程序,那将会在不到一秒钟的时间内完成该项工作,特别高效。接下来我们就用python语言完成该自动化程序的设计。

二、设计高效率Windows文件查找与复制程序

众所周知,Python对于自动化办公程序开发非常友好,它提供了各种且丰富的库和工具类,方便我们开发,那么接下来我们就一起来动手开发一个高效率查找与复制自动化操作程序。每一个步骤我都会给出大致的解释,方便大家理解。

1、导入模块

import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
  • os: 提供了操作系统相关的功能,如文件操作。
  • shutil: 提供了高级的文件操作功能,如复制文件。
  • tkinter: Python 的 GUI 库,用于构建图形界面。
  • filedialog: tkinter 中的文件对话框,用于选择文件或文件夹。
  • messagebox: tkinter 中的消息框,用于显示消息或警告。

2、 创建类 FileSearchAndCopyApp 

Python同其他编程一样,也需要先创建类再去进行类的代码编写。这个类是整个应用程序的主要部分,负责创建 GUI 界面和实现文件搜索与复制功能。

class FileSearchAndCopyApp:
def __init__(self, root):
    self.root = root
    self.root.title("兵哥批量文件操作系统")
    self.root.geometry("800x500")
    self.root.configure(bg="#F0F0F0")  

    self.source_folder_var = tk.StringVar()
    self.target_folder_var = tk.StringVar()
    self.keywords_file_var = tk.StringVar()

    self.create_widgets()
  • 初始化 GUI 窗口 (root) 的标题、大小和背景色。
  • 创建三个变量 (source_folder_vartarget_folder_varkeywords_file_var),用于存储选择的源文件夹、目标文件夹和关键字文件的路径。
  • 调用 create_widgets 方法创建界面组件。

3、编写create_widgets 方法 

编写create_widgets 方法的目的在于创建界面的标题标签、文本框、按钮,用于选择源文件夹、目标文件夹和关键字文件。其中btn_start_search 按钮用于触发搜索与复制文件的操作。为方便大家理解,下面代码使用注解标注具体用途。

def create_widgets(self):
    # 添加标题
    label_title = tk.Label(self.root, text="欢迎使用兵哥批量文件操作系统", font=("Arial", 24, "bold"), pady=20, bg="#F0F0F0")
    label_title.grid(row=0, column=0, columnspan=2)
    # 添加源文件夹选择行
    self.text_source_folder = tk.Text(self.root, height=2, width=70, font=("Courier", 10))
    self.text_source_folder.grid(row=1, column=1, padx=10, pady=10)
    self.btn_select_source = tk.Button(self.root, text="选择源文件夹", command=self.select_source_folder, font=("Arial", 12), width=14)
    self.btn_select_source.grid(row=1, column=0, padx=10)
    # 添加目标文件夹选择行,类似地添加关键字文件选择行
    # 搜索与复制按钮
    self.btn_start_search = tk.Button(self.root, text="执行", command=self.search_and_copy_files, bg="#4CAF50", fg="white", font=("Arial", 16, "bold"), width=10)
    self.btn_start_search.grid(row=4, column=0, columnspan=2, pady=20, padx=10, sticky='nsew')

4、文件夹和文件选择方法

def select_source_folder(self):
    self.source_folder = filedialog.askdirectory()
    self.text_source_folder.delete('1.0', tk.END)
    self.text_source_folder.insert(tk.END, self.source_folder)
  • select_source_folderselect_target_folderselect_keywords_file 方法分别使用 filedialog 获取用户选择的文件夹或文件,并更新相应的文本框显示选定的路径。

5、文件搜索与复制方法 

def search_and_copy_files(self):
    keywords = []
    with open(self.keywords_file, 'r', encoding='utf-8') as f:
        keywords = [line.strip() for line in f if line.strip()]

    success_count = 0
    for foldername, _, filenames in os.walk(self.source_folder):
        for filename in filenames:
            file_path = os.path.join(foldername, filename)
            if any(keyword in filename for keyword in keywords):
                shutil.copy(file_path, self.target_folder)
                success_count += 1
                print(f"复制 {file_path} 到 {self.target_folder}")

    messagebox.showinfo("操作成功", f"成功复制了 {success_count} 个文件到目标文件夹!")
  • search_and_copy_files 方法根据用户提供的关键字文件中的关键字,遍历源文件夹中的文件,如果文件名包含任何关键字,则将文件复制到目标文件夹中。
  • 我们使用 messagebox.showinfo显示操作成功的消息框,嵌入 {success_count} 显示成功复制的文件数目。

 6、编写主程序入口

if __name__ == "__main__":
    root = tk.Tk()
    app = FileSearchAndCopyApp(root)
    root.mainloop()
  • 创建 tkinter 的主窗口 root,并将其传递给 FileSearchAndCopyApp 类创建应用程序。
  • 进入主事件循环,等待用户交互。

至此,我们的程序就开发完毕了,它可以帮助我们高效完成批量操作作业,解放双手压力。

运行该程序,我们来看一下UI界面:

成功弹出UI界面,操作方便,具体美观度大家可以自行调节,接下来测试程序的可行性。

完整代码如下:

import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox

class FileSearchAndCopyApp:
    def __init__(self, root):
        self.root = root
        self.root.title("兵哥批量文件操作系统")
        self.root.geometry("800x500")
        self.root.configure(bg="#F0F0F0") 

        self.source_folder_var = tk.StringVar()
        self.target_folder_var = tk.StringVar()
        self.keywords_file_var = tk.StringVar()

        self.create_widgets()

    def create_widgets(self):
        # 添加标题
        label_title = tk.Label(self.root, text="欢迎使用兵哥批量文件操作系统", font=("Arial", 24, "bold"), pady=20, bg="#F0F0F0")
        label_title.grid(row=0, column=0, columnspan=2)

        # 添加源文件夹选择行
        self.text_source_folder = tk.Text(self.root, height=2, width=70, font=("Courier", 10))
        self.text_source_folder.grid(row=1, column=1, padx=10, pady=10)

        self.btn_select_source = tk.Button(self.root, text="选择源文件夹", command=self.select_source_folder,
                                           font=("Arial", 12), width=14)
        self.btn_select_source.grid(row=1, column=0, padx=10)

        # 添加目标文件夹选择行
        self.text_target_folder = tk.Text(self.root, height=2, width=70, font=("Courier", 10))
        self.text_target_folder.grid(row=2, column=1, padx=10, pady=10)

        self.btn_select_target = tk.Button(self.root, text="选择目标文件夹", command=self.select_target_folder,
                                           font=("Arial", 12), width=14)
        self.btn_select_target.grid(row=2, column=0, padx=10)

        # 添加关键字文件选择行
        self.text_keywords_file = tk.Text(self.root, height=2, width=70, font=("Courier", 10))
        self.text_keywords_file.grid(row=3, column=1, padx=10, pady=10)

        self.btn_select_keywords = tk.Button(self.root, text="选择关键字文件", command=self.select_keywords_file,
                                             font=("Arial", 12), width=14)
        self.btn_select_keywords.grid(row=3, column=0, padx=10)

        # 搜索与复制按钮
        self.btn_start_search = tk.Button(self.root, text="执行", command=self.search_and_copy_files,
                                          bg="#4CAF50", fg="white", font=("Arial", 16, "bold"), width=10)
        self.btn_start_search.grid(row=4, column=0, columnspan=2, pady=20, padx=10, sticky='nsew')

    def select_source_folder(self):
        self.source_folder = filedialog.askdirectory()
        self.text_source_folder.delete('1.0', tk.END)
        self.text_source_folder.insert(tk.END, self.source_folder)

    def select_target_folder(self):
        self.target_folder = filedialog.askdirectory()
        self.text_target_folder.delete('1.0', tk.END)
        self.text_target_folder.insert(tk.END, self.target_folder)

    def select_keywords_file(self):
        self.keywords_file = filedialog.askopenfilename()
        self.text_keywords_file.delete('1.0', tk.END)
        self.text_keywords_file.insert(tk.END, self.keywords_file)

    def search_and_copy_files(self):
        keywords = []
        with open(self.keywords_file, 'r', encoding='utf-8') as f:
            keywords = [line.strip() for line in f if line.strip()]

        success_count = 0
        for foldername, _, filenames in os.walk(self.source_folder):
            for filename in filenames:
                file_path = os.path.join(foldername, filename)
                if any(keyword in filename for keyword in keywords):
                    shutil.copy(file_path, self.target_folder)
                    success_count += 1
                    print(f"复制 {file_path} 到 {self.target_folder}")

        messagebox.showinfo("操作成功", f"成功复制了 {success_count} 个文件到目标文件夹!")

if __name__ == "__main__":
    root = tk.Tk()
    app = FileSearchAndCopyApp(root)
    root.mainloop()

三、测试程序可行性

我们新建一个高一3班的文件夹,假设学生张三、老六属于3班学生,那么我们使用程序批量操作,这里我做演示就测试两个同学,真正的作业中会有很多名单的,无伤大雅。

这里txt文件放入3班学生的所有id考生号就好了,其他班级你一样放进去就好了,然后保存。

这里提供两种方式选择文件夹或者文件,大家可以直接点击‘选择’按钮去选择,也可以在输入框中输入路径,均可。 

点击执行后,发现已经成功批量操作,非常完美。

四、程序封装

如果每次执行程序都需要打开pycharm编译器那将会很不方便,对于不懂编程的或者没有改编译环境的小伙伴也非常不友好,那么我们就需要将程序给封装起来,方便我们每次使用。当然网上有非常多的教程讲解了如何封装程序,这里不再赘述,大家感兴趣可以自行百度查找封装方法。

封装程序你可以自定义图标,我这里已经封装成了.exe可执行文件,可以直接分享给别人使用,实现即点即用,在任何支持.exe的操作系统上都可以运行。

五、程序使用说明

最后呢怕大家不够清晰地明白软件的使用方法,这里给大家做个简单介绍:

1、打开程序

2、点击选择源文件夹、目标文件夹

3、选择关键字文件

关键字文件里面写的是检索字段,每次执行检索操作是,把你想要查找的字段粘贴进去然后保存不同字段空行隔开。这个操作其实很简单,直接把excel表中的关键字那一列复制进来保存就好了。比如我的源文件夹里面有如下五个文件:

可见,这种文件很容易出现重名的,可能不同人姓名是一样的,那么就根据你的业务需要去选择检索字段就好了,如果是学生班级分类的话,那就以id号去检索,id号是唯一的不会重复。比如一班级的id号有12134、12135、12136,那我就把id号复制进关键字文件并保存,然后执行,就会自动操作完毕,并给出成功提示。

成功执行,点击确定,继续进行下一个迭代操作。

好了,今天的分享就到这里了,有任何问题欢迎评论区讨论或者私聊。


本文作者:@小二来碗醋

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐