第2讲:学会让 Python 帮你操作文件和文件夹

第2讲:学会让 Python 帮你操作文件和文件夹 本讲目标掌握os和shutil模块的核心函数学会遍历、移动、复制、删除文件和文件夹实战案例一键整理桌面所有文件到分类文件夹一、为什么需要专门学文件操作第一讲我们只做了“创建文件夹”这一件事。但在实际办公中你更多时候需要的是把散落在各处的文件移到一起把杂乱的文件按类型分类存放批量复制或备份重要文件删除不再需要的旧文件这些操作手动做一次两次还行但如果每天都要做、或者涉及几百个文件就必须交给代码。Python 的os和shutil模块就是干这个的。二、os 模块核心函数速览os模块提供了与操作系统交互的基本功能。以下是你最常用的几个函数作用示例os.listdir(path)列出指定目录下的所有文件和文件夹名os.listdir(C:/Users/xxx/Desktop)os.path.join(a, b)拼接路径自动处理斜杠os.path.join(桌面, 图片)os.path.exists(path)判断路径是否存在os.path.exists(D:/test)os.makedirs(path)创建文件夹可创建多级os.makedirs(D:/a/b/c)os.remove(path)删除文件os.remove(C:/temp/test.txt)os.rmdir(path)删除空文件夹os.rmdir(C:/temp/empty)os.rename(old, new)重命名文件或文件夹os.rename(旧名.txt, 新名.txt)os.path.getsize(path)获取文件大小字节os.path.getsize(report.pdf)os.path.splitext(path)分离文件名和扩展名返回(report, .pdf)三、shutil 模块核心函数速览shutil模块提供了更高级的文件操作比如复制和移动。函数作用示例shutil.copy(src, dst)复制文件到目标路径shutil.copy(a.txt, 备份/a.txt)shutil.copytree(src, dst)复制整个文件夹shutil.copytree(资料, 资料_备份)shutil.move(src, dst)移动文件或文件夹shutil.move(a.txt, 归档/a.txt)shutil.rmtree(path)删除文件夹及其所有内容shutil.rmtree(临时文件夹)⚠️shutil.rmtree非常危险删除不可恢复使用前务必确认路径正确。四、实战案例一键整理桌面文件4.1 场景描述你的桌面总是堆满了各种文件图片、文档、压缩包、安装包、快捷方式……每次找文件都要翻半天。我们希望运行一个脚本后桌面瞬间变得整整齐齐图片.jpg,.png,.gif,.bmp→ 自动移入图片文件夹文档.docx,.pdf,.xlsx,.txt→ 自动移入文档文件夹压缩包.zip,.rar,.7z→ 自动移入压缩包文件夹安装包.exe,.msi→ 自动移入安装包文件夹其他文件 → 不动4.2 完整代码新建一个文件保存为desktop_organizer.pyimport os import shutil # 1. 定义桌面路径 desktop os.path.join(os.path.expanduser(~), Desktop) # 2. 定义分类规则文件夹名 → 对应的扩展名列表 categories { 图片: [.jpg, .jpeg, .png, .gif, .bmp, .webp], 文档: [.docx, .doc, .pdf, .xlsx, .xls, .pptx, .txt, .md], 压缩包: [.zip, .rar, .7z, .tar, .gz], 安装包: [.exe, .msi, .dmg], } # 3. 遍历桌面所有文件 for filename in os.listdir(desktop): file_path os.path.join(desktop, filename) # 跳过文件夹 if os.path.isdir(file_path): continue # 4. 获取文件扩展名小写 _, ext os.path.splitext(filename) ext ext.lower() # 5. 判断属于哪个类别 moved False for folder_name, extensions in categories.items(): if ext in extensions: # 创建分类文件夹如果不存在 target_dir os.path.join(desktop, folder_name) os.makedirs(target_dir, exist_okTrue) # 移动文件 target_path os.path.join(target_dir, filename) shutil.move(file_path, target_path) print(f 移动: {filename} → {folder_name}/) moved True break if not moved: print(f⏭️ 跳过: {filename}未匹配任何类别) print(✅ 桌面整理完成)4.3 运行效果运行前桌面微信图片_20260713.png 年度总结报告.docx 项目数据.xlsx 安装包.exe photo_001.jpg 乱七八糟.zip运行后桌面图片/ 微信图片_20260713.png photo_001.jpg 文档/ 年度总结报告.docx 项目数据.xlsx 压缩包/ 乱七八糟.zip 安装包/ 安装包.exe五、进阶扩展扩展1按修改日期分类import time from datetime import datetime # 获取文件的最后修改时间 mod_time os.path.getmtime(file_path) mod_date datetime.fromtimestamp(mod_time).strftime(%Y-%m) # 按年月创建文件夹并移入 target_dir os.path.join(desktop, mod_date) os.makedirs(target_dir, exist_okTrue) shutil.move(file_path, os.path.join(target_dir, filename))扩展2添加撤销功能在移动文件前先把操作记录保存到一个日志文件中万一误操作可以手动恢复# 在移动前记录日志 with open(整理日志.txt, a, encodingutf-8) as log: log.write(f{filename} → {folder_name}/\n)扩展3排除特定文件有些文件你不想被移动比如当前正在运行的脚本本身# 在遍历时加入排除名单 exclude_files [desktop_organizer.py, 整理日志.txt] if filename in exclude_files: continue六、本讲总结知识点掌握程度os.listdir()遍历目录✅ 已掌握os.path.splitext()分离扩展名✅ 已掌握shutil.move()移动文件✅ 已掌握os.makedirs(exist_okTrue)安全创建文件夹✅ 已掌握按扩展名分类整理文件✅ 已实践七、课后练习修改分类规则增加视频类别.mp4,.avi,.mov,.mkv把分类目标路径从桌面改为D:\我的分类文件添加一个功能对于超过 100MB 的大文件单独移入大文件文件夹提示用os.path.getsize()下一讲预告​ 批量重命名——再也不用手动改100个文件名。第二讲到这里结束。需要我继续写第三讲吗