
❌ 笨办法:
右键重命名改到怀疑人生 → 按住Ctrl一个个选文件拖拽手酸眼花 → 打开回收站全选删除担心误删…
✅ 高手办法:
Python内置 os+ shutil库,代码一跑瞬间完成:
批量重命名(加前缀/改后缀/按序号)→ 自动分类归档(按扩展名/大小/日期)→ 智能清理垃圾 → 递归遍历深层文件夹!
今天,咱们就用几十行代码,把“文件地狱”变成“秩序天堂”!🚀
假设你是个项目经理,项目结束要整理500+文件的“交付包”:
合同在根目录,发票在子文件夹,图片散落各处… 手工操作能累到你怀疑人!
🛠️ 第一部分:环境准备
好消息!本次课程使用的库是 Python 内置的,不需要pip install!只要安装了 Python,你就拥有了这两个神器:
os库:操作系统接口,负责获取路径、重命名、删除、遍历。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 会自动钻进每一层子文件夹,把里面的文件都挖出来,再也不用手动点开文件夹了!📝场景:给所有图片加上日期前缀假设文件夹里有 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}")
🚀 综合实战:构建“项目自动归档神器”
任务目标:
- 扫描指定文件夹。
- 将所有
.xlsx 和 .docx 复制到“文档备份”文件夹。 - 将所有
.jpg 和 .png 移动到“图片素材”文件夹。 - 删除所有
.tmp 和以 ~$ 开头的临时文件。 - 生成一份
归档日志.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)。用python处理Excel意义就在于:从琐碎的体力劳动中解放出来,去思考更有价值的工作。