当前位置:首页>python>第7课:鼠标点到手抽筋?Python批量整理术,几千个文件1分钟搞定!

第7课:鼠标点到手抽筋?Python批量整理术,几千个文件1分钟搞定!

  • 2026-09-16 14:27:22
第7课:鼠标点到手抽筋?Python批量整理术,几千个文件1分钟搞定!

📢你是不是也被文件折磨疯了

  • 下载文件夹里堆满report(1).pdf、report(2).pdf… 想按日期重命名?

  • 项目结束要整理100个散落的 .docx和 .xlsx到新文件夹?

  • 临时文件夹几千个缓存文件,想一键清空又怕误删?

  • 想把 .jpg按大小分类,大的移走小的留下?

❌ 笨办法:

右键重命名改到怀疑人生 → 按住Ctrl一个个选文件拖拽手酸眼花 → 打开回收站全选删除担心误删…

✅ 高手办法:

Python内置 os+ shutil库,代码一跑瞬间完成:

批量重命名(加前缀/改后缀/按序号)→ 自动分类归档(按扩展名/大小/日期)→ 智能清理垃圾 → 递归遍历深层文件夹!

今天,咱们就用几十行代码,把“文件地狱”变成“秩序天堂”!🚀


🎯痛点直击:电脑越用越乱?

假设你是个项目经理,项目结束要整理500+文件的“交付包”:

合同在根目录,发票在子文件夹,图片散落各处… 手工操作能累到你怀疑人!


🛠️ 第一部分:环境准备

好消息!本次课程使用的库是 Python 内置的,不需要pip install!只要安装了 Python,你就拥有了这两个神器:

  1. os库:操作系统接口,负责获取路径、重命名、删除、遍历。
  2. shutil库:高级文件操作,负责复制、移动、删除整个文件夹。
import osimport shutil

⚔️ 第二部分:核心功能实战

1️⃣ 获取与遍历:看清文件的“全貌”

在操作文件前,先得知道文件在哪

📂 场景:列出当前文件夹下的所有文件

import os# 获取当前脚本所在的文件夹路径current_dir = os.getcwd()print(f"当前工作目录:{current_dir}")# 列出该目录下所有文件和文件夹的名字files = os.listdir(current_dir)print("文件清单:", files)
🔍 进阶:只筛选特定类型的文件
import os# 获取当前脚本所在的文件夹路径current_dir = os.getcwd()print(f"当前工作目录:{current_dir}")# 列出该目录下所有文件和文件夹的名字files = os.listdir(current_dir)print("文件清单:", files)excel_files = [f for f in files if f.endswith('.xlsx')]print(f"找到 {len(excel_files)} 个 Excel 文件:", excel_files)
🌲 高阶:递归遍历(扫描所有子文件夹)
想象你要在一个包含多层子文件夹的项目目录中找所有 .pdf 文件。os.walk() 是神一般的存在!
import ostarget_folder = './项目资料'print("开始深度扫描...")for root, dirs, files in os.walk(target_folder):        # root: 当前遍历到的文件夹路径        # dirs: 当前文件夹下的子文件夹列表        # files: 当前文件夹下的文件列表       for file in files:                if file.endswith('.pdf'):                        full_path = os.path.join(root, file)                       print(f"发现 PDF: {full_path}")
💡核心逻辑:os.walk 会自动钻进每一层子文件夹,把里面的文件都挖出来,再也不用手动点开文件夹了!
2️⃣ 批量重命名:治愈“文件名强迫症”

📝场景:给所有图片加上日期前缀假设文件夹里有 IMG_001.jpg, IMG_002.jpg... 你想改成 20231027_IMG_001.jpg。

import osfolder_path = './照片备份'prefix = '20231027_'# 获取所有 jpg 文件files = [f for f in os.listdir(folder_path) if f.endswith('.jpg')]for i, filename in enumerate(files):       # 构造旧路径和新路径       old_path = os.path.join(folder_path, filename)      # 新文件名:前缀 + 原文件名 (也可以加序号)        new_filename = f"{prefix}{filename}"        new_path = os.path.join(folder_path, new_filename)    # 执行重命名    os.rename(old_path, new_path)        print(f"已重命名:{filename} -> {new_filename}")print("✅ 批量重命名完成!")

⚠️避坑提示:如果在循环中直接修改文件名,可能会造成逻辑混乱(比如把 A 改成 B,结果 B 已经存在)。建议先打印预览,确认无误后再运行。

3️⃣ 自动分类归档:打造“整洁桌面”

🗂️ 场景:把Downloads文件夹里的文件按后缀名归类把所有 .pdf 移入“文档”文件夹,.jpg 移入“图片”文件夹,.exe 移入“安装包”文件夹。

import osimport shutilsource_folder = './Downloads'  # 源文件夹# 定义映射规则:后缀名 -> 目标文件夹名rules = {'.pdf': '文档',        '.docx': '文档',        '.jpg': '图片',        '.png': '图片',        '.exe': '安装包',        '.zip': '压缩包'}for filename in os.listdir(source_folder):       # 跳过文件夹,只处理文件        if os.path.isdir(os.path.join(source_folder, filename)):                continue        file_ext = os.path.splitext(filename)[1].lower()      # 获取后缀并转小写        if file_ext in rules:                # 确定目标文件夹名称                category = rules[file_ext]                target_dir = os.path.join(source_folder, category)         # 如果目标文件夹不存在,就创建它                if not os.path.exists(target_dir):                       os.makedirs(target_dir)                # 移动文件                src = os.path.join(source_folder, filename)                dst = os.path.join(target_dir, filename)              shutil.move(src, dst)                print(f"已将 {filename} 移至 [{category}]") print("🎉 文件归档完毕,桌面清爽了!")

✨ 亮点:这段代码运行一次,你混乱的“下载”文件夹瞬间变得井井有条!

4️⃣ 智能清理:一键删除垃圾文件

🗑️ 场景:清理临时文件或特定大小的文件比如:删除所有 .tmp 文件,或者删除所有大于 100MB 的视频文件。

import osclean_folder = './临时缓存'deleted_count = 0for filename in os.listdir(clean_folder):        file_path = os.path.join(clean_folder, filename)        # 跳过文件夹        if os.path.isdir(file_path):                continue      # 条件1:删除 .tmp 结尾的文件        if filename.endswith('.tmp'):               os.remove(file_path)               deleted_count += 1               print(f"已删除临时文件:{filename}")        # 条件2:删除大于 50MB 的文件 (示例)        # elif os.path.getsize(file_path) > 50 * 1024 * 1024:        #     os.remove(file_path)        #     print(f"已删除大文件:{filename}")print(f"✅ 清理完成,共删除 {deleted_count} 个文件。")

⚠️ 高能预警:os.remove 和 shutil.rmtree 是不可逆的操作!删除后不进回收站!新手铁律:在正式运行删除代码前,先把 os.remove() 注释掉,换成 print(f"准备删除:{filename}") 预览一遍,确认无误后再开启删除开关!

5️⃣ 高级组合:文件备份与复制

💾场景:将重要项目文件夹完整备份到移动硬盘

import shutilimport ossource_dir = './重要项目'backup_dir = './Backup/重要项目_备份版'# 如果备份目录已存在,先删除旧的(可选,视需求而定)if os.path.exists(backup_dir):       shutil.rmtree(backup_dir)# 复制整个文件夹树(包括子文件夹和文件)shutil.copytree(source_dir, backup_dir)print(f"✅ 备份成功!数据已保存至:{backup_dir}")

⚠️ 避坑指南:新手常犯的错

🚀 综合实战:构建“项目自动归档神器”

任务目标:

  1. 扫描指定文件夹。
  2. 将所有 .xlsx 和 .docx 复制到“文档备份”文件夹。
  3. 将所有 .jpg 和 .png 移动到“图片素材”文件夹。
  4. 删除所有 .tmp 和以 ~$ 开头的临时文件。
  5. 生成一份 归档日志.txt,记录操作了多少个文件。

🐍 完整代码:

import osimport shutilfrom datetime import datetimedef auto_archive_project(project_path):        # 定义子文件夹        doc_backup = os.path.join(project_path, '01_文档备份')        img_folder = os.path.join(project_path, '02_图片素材')     # 创建目标文件夹        os.makedirs(doc_backup, exist_ok=True)        os.makedirs(img_folder, exist_ok=True)       log_content = []        log_content.append(f"=== 归档时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} ===\n")        count_doc = 0        count_img = 0        count_del = 0        # 遍历文件夹(不递归子目录,如需递归可改用 os.walk)        for filename in os.listdir(project_path):                file_path = os.path.join(project_path, filename)         # 跳过文件夹本身和我们刚创建的备份目录                if os.path.isdir(file_path):                        continue          # 1. 处理文档 (复制)                if filename.endswith(('.xlsx', '.docx')):                       shutil.copy(file_path, doc_backup)                       log_content.append(f"[复制] {filename} -> 文档备份")                       count_doc += 1          # 2. 处理图片 (移动)                elif filename.endswith(('.jpg', '.png', '.jpeg')):                        shutil.move(file_path, img_folder)                        log_content.append(f"[移动] {filename} -> 图片素材")                        count_img += 1         # 3. 清理垃圾 (删除)               elif filename.endswith('.tmp') or filename.startswith('~$'):                       os.remove(file_path)                       log_content.append(f"[删除] {filename} (垃圾文件)")                       count_del += 1        # 写入日志        log_content.append(f"\n=== 统计 ===")        log_content.append(f"文档备份:{count_doc} 个")        log_content.append(f"图片归档:{count_img} 个")        log_content.append(f"垃圾清理:{count_del} 个")       log_file = os.path.join(project_path, '归档日志.txt')        with open(log_file, 'w', encoding='utf-8') as f:                f.write('\n'.join(log_content))        print("🎉 项目归档完成!详情查看 '归档日志.txt'")# 运行入口 (请替换为你真实的文件夹路径)auto_archive_project('./我的测试项目')

🌟 内容小结

恭喜你!你已经掌握了 Python 文件管理的“核武器”:

os 库:遍历 (walk)、重命名 (rename)、删除 (remove)、路径拼接(join)
shutil 库:移动 (move)、复制 (copytree)、删除文件夹 (rmtree)。
核心思维:
  • 先预览,后执行(尤其是删除操作)
  • 路径自适应(使用os.path.join)
  • 自动化分类(利用后缀名判断)

用python处理Excel意义就在于:从琐碎的体力劳动中解放出来,去思考更有价值的工作。


在评论区分享一个你处理Excel数据的难点,小居下期给你安排上!

点赞

📁收藏

关注

让更多同事告别加班!

第6课:告别996!Word自动化神技,一键生成百份合同,今晚准点下班!

最新文章

随机文章