在实际开发、数据整理或办公自动化中,我们经常需要一次性处理大量文件,例如:
- 批量重命名文件
- 批量复制/移动文件
- 批量压缩文件
- 批量格式转换
- 批量读取与写入文本内容
Python 的标准库中,os、shutil、glob 等模块可以轻松构建各种文件批处理脚本,是自动化办公与数据清洗的利器。
本章将从常见场景出发,通过示例脚本帮助你快速掌握文件批量处理能力。
一、基础库介绍
1. os 模块
提供文件路径、文件夹、新建/删除目录等操作。
常用方法:
os.listdir()os.rename()os.path.exists()os.makedirs()os.remove()
2. shutil 模块
执行高级文件操作:
- 拷贝文件:
shutil.copy() - 移动文件:
shutil.move() - 拷贝整个文件夹:
shutil.copytree()
3. glob 模块
使用通配符批量匹配文件,例如:
1glob.glob("*.txt") 2glob.glob("images/*.jpg") 3
是处理大量文件时非常方便的模块。
二、批量重命名文件
例如:把文件名全部改为统一格式 img_001.jpg、img_002.jpg。
1import os 2 3folder = "images" 4 5files = os.listdir(folder) 6 7for i, filename in enumerate(files, start=1): 8 old_path = os.path.join(folder, filename) 9 ext = os.path.splitext(filename)[1] 10 new_name = f"img_{i:03d}{ext}" 11 new_path = os.path.join(folder, new_name) 12 os.rename(old_path, new_path) 13 14print("重命名完成。") 15
技术要点
os.path.splitext()可获得文件扩展名i:03d生成 001、002 的数字序号
三、批量复制/移动文件
1. 批量复制
1import shutil 2import glob 3 4src_files = glob.glob("data/*.txt") 5dst_folder = "backup" 6 7os.makedirs(dst_folder, exist_ok=True) 8 9for file in src_files: 10 shutil.copy(file, dst_folder) 11 12print("复制完成。") 13
2. 批量移动
1import shutil 2import glob 3 4for file in glob.glob("data/*.csv"): 5 shutil.move(file, "csv_files") 6 7print("移动完成。") 8
四、批量删除文件
例如,删除所有 .log 文件:
1import os 2import glob 3 4for file in glob.glob("logs/*.log"): 5 os.remove(file) 6 7print("删除完成。") 8
目录删除使用 shutil.rmtree("folder")。
五、批量读取文本内容并写入汇总文件
比如,你有 100 个 .txt 日志文件,需要汇总到一个文件。
1import glob 2 3files = glob.glob("logs/*.txt") 4 5with open("summary.txt", "w", encoding="utf-8") as outfile: 6 for file in files: 7 with open(file, "r", encoding="utf-8") as f: 8 outfile.write(f"=== 文件:{file} ===\n") 9 outfile.write(f.read()) 10 outfile.write("\n\n") 11 12print("汇总完成。") 13
六、批量修改文件内容(查找 + 替换)
在大量 .txt 文件中,将所有 "测试" 替换为 "正式":
1import glob 2 3for file in glob.glob("docs/*.txt"): 4 with open(file, "r", encoding="utf-8") as f: 5 text = f.read() 6 7 text = text.replace("测试", "正式") 8 9 with open(file, "w", encoding="utf-8") as f: 10 f.write(text) 11 12print("批量替换完成。") 13
七、批量压缩文件(zipfile模块)
1import zipfile 2import glob 3 4files = glob.glob("data/*.csv") 5 6with zipfile.ZipFile("data.zip", "w") as zipf: 7 for file in files: 8 zipf.write(file) 9 10print("压缩完成。") 11
八、批量处理的实战案例:自动整理下载目录
下面给出一个实战脚本,把下载目录按文件类型分类:
1import os 2import shutil 3import glob 4 5download_folder = "downloads" 6 7file_types = { 8 "图片": ["*.jpg", "*.png"], 9 "视频": ["*.mp4"], 10 "压缩包": ["*.zip", "*.rar"], 11 "文档": ["*.pdf", "*.docx", "*.txt"] 12} 13 14for folder_name, patterns in file_types.items(): 15 target_folder = os.path.join(download_folder, folder_name) 16 os.makedirs(target_folder, exist_ok=True) 17 18 for pattern in patterns: 19 for file in glob.glob(os.path.join(download_folder, pattern)): 20 shutil.move(file, target_folder) 21 22print("下载目录已整理完毕!") 23
执行后,文件会自动分类到各自目录,办公效率提升非常明显。
九、文件批处理脚本的最佳实践
- 使用 glob 匹配大量文件更快
- 写入文件前备份原文件
- 对文件操作加入 try/except 防止脚本崩溃
- 复杂任务建议封装成函数或类
示例:
1try: 2 shutil.move(src, dst) 3except Exception as e: 4 print("移动失败:", e) 5
十、总结
本章你掌握了 Python 在文件自动化中的核心技能:
- 批量重命名
- 批量复制、移动、删除
- 批量读取、写入和替换内容
- 批量压缩
- 使用 glob 进行文件匹配
- 实战:自动整理下载目录
这些脚本结合日常办公场景,可以最大化提升工作效率,是每个 Python 工程师必须掌握的技能点。
