作为打工人 / 学生党,你是否也被这些问题困扰?—— 电脑里的文件堆成 “垃圾山”,照片、文档、安装包混在一个文件夹;想找上个月的报告,翻了 10 分钟才定位到;下载的资料命名乱七八糟,“新建文档 1.docx”“最终版_改 2.pdf” 占满屏幕……

今天教大家用 Python 开发一款文件批量管理工具,一次性解决 “分类、重命名、查找” 三大痛点。全程仅需基础语法 + 1 个内置库,新手也能跟着做,最后还会教你如何双击运行工具,彻底解放双手!

一、项目为什么值得学?(3 个核心价值)

  1. 刚需性强:无论工作还是学习,每个人都需要整理文件,学会后当天就能用,帮你节省 80% 的整理时间
  2. 技术门槛极低:只用 Python 自带的os库(无需额外安装),核心代码不到 100 行,适合 Python 入门 1 周以上的新手练手
  3. 可扩展性高:基础功能实现后,还能轻松添加 “自动压缩”“文件加密”“定时整理” 等进阶功能,放在简历 / 作品集里超加分

二、准备工作:3 分钟完成环境搭建

本项目无需安装任何第三方库,Python 自带的os库就能实现所有功能(os库是 Python 内置的文件 / 目录操作模块,无需pip install)。

确认环境

  1. 打开电脑的 CMD(Windows)或终端(Mac),输入python --version,确保 Python 版本在 3.6 以上(目前主流版本都满足)
  2. 新建一个文件夹,命名为 “Python 文件管理工具”,用于存放代码和测试文件
  3. 在该文件夹中新建 2 个文件:
    • file_manager.py:存放工具代码
    • 测试文件夹:用于存放各种类型的测试文件(如图片、文档、视频等,方便后续测试功能)

三、功能 1:文件自动分类 —— 按类型整理混乱文件夹

需求场景

假设 “测试文件夹” 里混杂了各种类型的文件:.jpg图片、.docx文档、.pdf资料、.mp4视频、.exe安装包…… 我们需要让工具自动按文件类型创建文件夹,并将对应文件移动到指定文件夹中,最终效果如下:

plaintext

测试文件夹/
├─ 图片文件/(存放.jpg/.png/.gif等)
├─ 文档文件/(存放.docx/.pdf/.txt等)
├─ 视频文件/(存放.mp4/.avi等)
├─ 安装包/(存放.exe/.dmg等)
└─ 其他文件/(存放未匹配到类型的文件)

核心思路

  1. 定义 “文件类型 - 文件夹名称” 的对应关系(比如.jpg对应 “图片文件”)
  2. 遍历目标文件夹中的所有文件(跳过子文件夹)
  3. 对每个文件,根据后缀名判断其类型,找到对应的目标文件夹
  4. 若目标文件夹不存在,则自动创建;若已存在,直接将文件移动过去

完整代码(带详细注释)

import os
import shutil  # 用于移动文件

def auto_classify_files(target_folder):
    """
    按文件类型自动分类文件
    :param target_folder: 目标文件夹路径(需要整理的文件夹)
    """
    # 1. 定义文件类型与目标文件夹的映射关系(可根据自己需求扩展)
    file_type_map = {
        # 图片类型
        "图片文件": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff"],
        # 文档类型
        "文档文件": [".docx", ".doc", ".pdf", ".txt", ".xlsx", ".xls", ".ppt", ".pptx"],
        # 视频类型
        "视频文件": [".mp4", ".avi", ".mov", ".mkv", ".flv"],
        # 音频类型
        "音频文件": [".mp3", ".wav", ".flac", ".m4a"],
        # 安装包/压缩包
        "安装包与压缩包": [".exe", ".dmg", ".zip", ".rar", ".7z"],
        # 代码文件
        "代码文件": [".py", ".java", ".cpp", ".html", ".css", ".js"]
    }

    # 2. 遍历目标文件夹中的所有内容(文件和子文件夹)
    for file_name in os.listdir(target_folder):
        # 拼接完整的文件路径
        file_path = os.path.join(target_folder, file_name)
        
        # 跳过子文件夹,只处理文件
        if os.path.isdir(file_path):
            continue
        
        # 3. 获取文件的后缀名(如".jpg"),并转换为小写(避免大小写问题,如".JPG"和".jpg"统一处理)
        file_ext = os.path.splitext(file_name)[1].lower()
        
        # 4. 标记文件是否已分类(默认未分类)
        classified = False
        
        # 5. 遍历文件类型映射,找到对应的目标文件夹
        for folder_name, ext_list in file_type_map.items():
            if file_ext in ext_list:
                # 拼接目标文件夹路径
                target_subfolder = os.path.join(target_folder, folder_name)
                
                # 若目标文件夹不存在,自动创建
                if not os.path.exists(target_subfolder):
                    os.makedirs(target_subfolder)
                    print(f"已创建文件夹:{folder_name}")
                
                # 移动文件到目标文件夹(若文件已存在,会覆盖,可根据需求修改)
                shutil.move(file_path, os.path.join(target_subfolder, file_name))
                print(f"已移动:{file_name} → {folder_name}")
                
                # 标记文件已分类
                classified = True
                break  # 找到对应类型后,跳出循环
        
        # 6. 若未匹配到任何类型,移动到"其他文件"文件夹
        if not classified:
            other_folder = os.path.join(target_folder, "其他文件")
            if not os.path.exists(other_folder):
                os.makedirs(other_folder)
            shutil.move(file_path, os.path.join(other_folder, file_name))
            print(f"已移动(未匹配类型):{file_name} → 其他文件")

# ------------------- 调用函数(修改为你的目标文件夹路径) -------------------
if __name__ == "__main__":
    # 示例:Windows路径(注意用双反斜杠\\,或单斜杠/)
    # target = "C:\\Users\\你的用户名\\Desktop\\测试文件夹"
    # 示例:Mac/Linux路径
    # target = "/Users/你的用户名/Desktop/测试文件夹"
    # 建议先在"测试文件夹"中放入各类文件,再执行代码
    target_folder = "测试文件夹"  # 相对路径(与代码文件同目录)
    print("开始自动分类文件...")
    auto_classify_files(target_folder)
    print("文件分类完成!")

效果演示

  1. 在 “测试文件夹” 中放入以下测试文件:

    • 风景.jpg头像.png(图片)
    • 工作总结.docx学习笔记.pdf(文档)
    • 电影.mp4(视频)
    • 音乐.mp3(音频)
    • Python安装包.exe资料压缩包.zip(安装包 / 压缩包)
    • hello.py(代码文件)
    • 未知格式.abc(未匹配类型文件)
  2. 运行代码后,打开 “测试文件夹”,会发现自动生成了 “图片文件”“文档文件” 等子文件夹,所有文件已按类型自动移动到对应文件夹中,“未知格式.abc” 被放入 “其他文件”。

四、功能 2:文件批量重命名 —— 按 “规则” 统一命名格式

需求场景

下载的资料命名混乱?比如 “微信图片_20240101123456.jpg”“Screenshot_123.png”,想统一改成 “旅行照片_001.jpg”“旅行照片_002.png” 的格式;或者将 “报告_最终版_改 1.docx”“报告_最终版_改 2.docx” 统一整理为 “2024 年度报告_V1.docx”“2024 年度报告_V2.docx”。

我们实现两种常用的重命名规则,可根据需求切换:

  • 规则 1:按 “前缀 + 序号” 命名(如 “旅行照片_001.jpg”“旅行照片_002.jpg”)
  • 规则 2:按 “旧文件名替换关键词” 命名(如将所有 “最终版” 替换为 “V1.0”)

核心思路

  1. 规则 1:遍历目标文件夹中的指定类型文件,按顺序分配序号(支持补零,如 001、002),拼接 “前缀 + 序号 + 原后缀” 作为新文件名。
  2. 规则 2:遍历目标文件夹中的所有文件,将文件名中的指定关键词替换为新关键词,保持其他部分不变。

完整代码(带详细注释)

import os

def batch_rename_files(target_folder, rename_rule, **kwargs):
    """
    批量重命名文件
    :param target_folder: 目标文件夹路径
    :param rename_rule: 重命名规则(1:前缀+序号;2:关键词替换)
    :param kwargs: 规则对应的参数(rule1需传prefix;rule2需传old_key、new_key)
    """
    # 遍历目标文件夹中的所有文件(跳过子文件夹)
    file_list = [f for f in os.listdir(target_folder) if os.path.isfile(os.path.join(target_folder, f))]
    
    if not file_list:
        print("目标文件夹中没有文件可重命名!")
        return

    # 规则1:前缀+序号(如“旅行照片_001.jpg”)
    if rename_rule == 1:
        # 检查是否传入“前缀”参数
        if "prefix" not in kwargs:
            print("规则1需要传入'prefix'参数(如prefix='旅行照片')!")
            return
        prefix = kwargs["prefix"]
        
        # 可选参数:序号起始值(默认1)、序号位数(默认3,即001、002)
        start_num = kwargs.get("start_num", 1)
        num_digits = kwargs.get("num_digits", 3)
        
        print(f"按规则1重命名:前缀='{prefix}', 起始序号={start_num}, 序号位数={num_digits}")
        
        # 遍历文件,按顺序重命名
        for idx, file_name in enumerate(file_list, start=start_num):
            # 获取原文件的后缀名
            file_ext = os.path.splitext(file_name)[1]
            # 生成序号(补零,如num_digits=3时,1→001)
            serial_num = str(idx).zfill(num_digits)
            # 生成新文件名
            new_file_name = f"{prefix}_{serial_num}{file_ext}"
            # 拼接原路径和新路径
            old_path = os.path.join(target_folder, file_name)
            new_path = os.path.join(target_folder, new_file_name)
            
            # 执行重命名(若新文件名已存在,会报错,可根据需求修改)
            os.rename(old_path, new_path)
            print(f"已重命名:{file_name} → {new_file_name}")

    # 规则2:关键词替换(如将“最终版”替换为“V1.0”)
    elif rename_rule == 2:
        # 检查是否传入“旧关键词”和“新关键词”参数
        if "old_key" not in kwargs or "new_key" not in kwargs:
            print("规则2需要传入'old_key'和'new_key'参数(如old_key='最终版', new_key='V1.0')!")
            return
        old_key = kwargs["old_key"]
        new_key = kwargs["new_key"]
        
        print(f"按规则2重命名:将'{old_key}'替换为'{new_key}'")
        
        # 遍历文件,替换关键词
        for file_name in file_list:
            # 检查文件名是否包含旧关键词
            if old_key in file_name:
                # 替换关键词生成新文件名
                new_file_name = file_name.replace(old_key, new_key)
                # 拼接原路径和新路径
                old_path = os.path.join(target_folder, file_name)
                new_path = os.path.join(target_folder, new_file_name)
                
                # 执行重命名
                os.rename(old_path, new_path)
                print(f"已重命名:{file_name} → {new_file_name}")
            else:
                print(f"跳过(不含关键词):{file_name}")

    else:
        print("无效的重命名规则!请选择1或2。")

# ------------------- 调用函数(根据需求选择规则) -------------------
if __name__ == "__main__":
    target_folder = "测试文件夹/图片文件"  # 以“图片文件”子文件夹为例
    
    # 选择规则1:前缀+序号(将图片统一命名为“旅行照片_001.jpg”“旅行照片_002.jpg”)
    print("=== 执行规则1:前缀+序号 ===")
    batch_rename_files(
        target_folder=target_folder,
        rename_rule=1,
        prefix="旅行照片",  # 前缀
        start_num=1,       # 起始序号
        num_digits=3       # 序号位数(补零)
    )
    
    # # 选择规则2:关键词替换(将“旅行照片”替换为“2024旅行记录”)
    # print("\n=== 执行规则2:关键词替换 ===")
    # batch_rename_files(
    #     target_folder=target_folder,
    #     rename_rule=2,
    #     old_key="旅行照片",  # 旧关键词
    #     new_key="2024旅行记录"  # 新关键词
    # )
    
    print("\n批量重命名完成!")

效果演示

  1. 规则 1 效果:假设 “图片文件” 文件夹中有风景.jpg头像.png,执行规则 1 后,文件名变为旅行照片_001.jpg旅行照片_002.png
  2. 规则 2 效果:若再执行规则 2(将 “旅行照片” 替换为 “2024 旅行记录”),文件名会变为2024旅行记录_001.jpg2024旅行记录_002.png

五、功能 3:文件快速查找 —— 按 “关键词 + 类型” 精准定位

需求场景

电脑里文件太多,想找 “包含‘Python’关键词的.pdf 文件”,但记不清具体放在哪个文件夹?传统方式需要逐层打开文件夹查找,效率极低。我们可以实现一个 “按关键词 + 文件类型” 的快速查找功能,输入关键词和类型后,秒级返回所有匹配文件的路径。

核心思路

  1. 接收用户输入的 “目标根目录”“关键词”“文件类型(可选)”
  2. 递归遍历根目录下的所有文件(包括子文件夹中的文件)
  3. 对每个文件,判断 “文件名是否包含关键词” 且 “文件类型是否匹配(若指定)”
  4. 收集所有匹配文件的路径,最终打印输出

完整代码(带详细注释)

import os

def search_files(root_folder, keyword, file_ext=None):
    """
    按关键词和文件类型查找文件
    :param root_folder: 查找的根目录(会递归查找所有子文件夹)
    :param keyword: 文件名中的关键词(不区分大小写)
    :param file_ext: 目标文件类型(如".pdf",可选,不指定则匹配所有类型)
    :return: 匹配文件的路径列表
    """
    matched_files = []
    
    # 递归遍历根目录下的所有文件和子文件夹
    for root, dirs, files in os.walk(root_folder):
        for file_name in files:
            # 1. 检查文件名是否包含关键词(不区分大小写)
            if keyword.lower() in file_name.lower():
                # 2. 检查文件类型(若指定了类型)
                if file_ext:
                    # 统一转换为小写,避免大小写问题(如".PDF"和".pdf")
                    if os.path.splitext(file_name)[1].lower() == file_ext.lower():
                        # 拼接完整路径并添加到结果列表
                        file_path = os.path.join(root, file_name)
                        matched_files.append(file_path)
                else:
                    # 未指定类型,直接添加所有含关键词的文件
                    file_path = os.path.join(root, file_name)
                    matched_files.append(file_path)
    
    return matched_files

# ------------------- 调用函数(输入查找条件) -------------------
if __name__ == "__main__":
    print("=== Python文件快速查找工具 ===")
    # 1. 输入查找条件(可根据自己需求修改)
    root_folder = "测试文件夹"  # 查找的根目录(递归查找所有子文件夹)
    search_keyword = "Python"   # 文件名中的关键词(如“Python”“报告”)
    target_ext = ".pdf"         # 目标文件类型(如".pdf",设为None则查找所有类型)
    
    # 2. 执行查找
    print(f"正在查找:{root_folder} 下,

更多推荐