使用Python批量整理文件的三种常见场景与处理方法
作者:detayun
下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处,这些场景你一定不陌生,所以本文提供三种实用场景的Python代码解决方案:按文件类型自动分类、按日期整理照片、批量重命名文件,直接运行、省时省力,需要的朋友可以参考下
为什么你需要批量整理文件?
下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处……这些场景你一定不陌生。
手动整理耗时耗力,而Python几行代码就能搞定。今天这篇博客,我会从最常见的3个场景出发,给你可直接运行的代码,拿来就能用。
场景一:按文件类型自动分类
这是最实用的场景。把"下载"文件夹里的文件,按后缀名自动分到对应文件夹。
import os
import shutil
def sort_by_extension(target_dir):
# 文件类型与文件夹的映射
type_map = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'],
'文档': ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt'],
'视频': ['.mp4', '.avi', '.mkv', '.mov', '.wmv'],
'音频': ['.mp3', '.wav', '.flac', '.aac'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'代码': ['.py', '.js', '.html', '.css', '.java', '.c']
}
for filename in os.listdir(target_dir):
file_path = os.path.join(target_dir, filename)
if not os.path.isfile(file_path):
continue
ext = os.path.splitext(filename)[1].lower()
moved = False
for folder, extensions in type_map.items():
if ext in extensions:
folder_path = os.path.join(target_dir, folder)
os.makedirs(folder_path, exist_ok=True)
shutil.move(file_path, os.path.join(folder_path, filename))
moved = True
break
if not moved:
other_path = os.path.join(target_dir, '其他')
os.makedirs(other_path, exist_ok=True)
shutil.move(file_path, os.path.join(other_path, filename))
# 使用
sort_by_extension(r'C:\Users\你的用户名\Downloads')
运行前注意: 把路径换成你自己的文件夹路径。建议先在测试文件夹上跑一遍。
场景二:按日期整理照片/文件
照片按拍摄日期分类,是另一个高频需求。
import os
import shutil
from datetime import datetime
def sort_by_date(target_dir, date_from='exif'):
for filename in os.listdir(target_dir):
file_path = os.path.join(target_dir, filename)
if not os.path.isfile(file_path):
continue
# 方式1:从文件名提取日期(如 2026-06-20_photo.jpg)
try:
date_str = filename.split('_')[0] # 2026-06-20
date_obj = datetime.strptime(date_str, '%Y-%m-%d')
except:
# 方式2:从文件修改时间获取
date_obj = datetime.fromtimestamp(os.path.getmtime(file_path))
folder_name = date_obj.strftime('%Y-%m') # 2026-06
folder_path = os.path.join(target_dir, folder_name)
os.makedirs(folder_path, exist_ok=True)
shutil.move(file_path, os.path.join(folder_path, filename))
# 使用
sort_by_date(r'D:\照片')
提示: 如果你的照片有EXIF信息(拍摄日期),可以用 piexif 或 Pillow 库读取真实拍摄时间,比文件名更准确。
场景三:批量重命名
文件名乱七八糟?统一格式一键搞定。
import os
def batch_rename(target_dir, prefix='文件', start=1):
files = [f for f in os.listdir(target_dir) if os.path.isfile(os.path.join(target_dir, f))]
for i, filename in enumerate(files, start=start):
ext = os.path.splitext(filename)[1]
new_name = f"{prefix}_{i:03d}{ext}" # 文件_001.jpg
old_path = os.path.join(target_dir, filename)
new_path = os.path.join(target_dir, new_name)
os.rename(old_path, new_path)
print(f"{filename} → {new_name}")
# 使用
batch_rename(r'C:\Users\你的用户名\Desktop\截图', prefix='截图', start=1)
输出示例:
screenshot_abc.png → 截图_001.png 屏幕快照 2026-06-20.png → 截图_002.png
几个实用建议
| 建议 | 说明 |
|---|---|
| 先备份再操作 | 批量操作不可逆,建议先复制一份原文件 |
| 用 os.makedirs(exist_ok=True) | 避免文件夹已存在时报错 |
| shutil.move 比 os.rename 更安全 | 跨磁盘移动时 os.rename 会失败 |
| 加 try/except 包装 | 实际文件中可能有特殊字符或权限问题 |
最后
批量整理文件的核心逻辑就三步:
- 遍历文件夹中的文件
- 判断分类规则(类型/日期/名称)
- 移动或重命名到目标位置
上面的代码可以直接复制使用,根据自己的需求改一下路径和规则就行。
如果你的需求更复杂(比如按文件大小分类、重复文件检测),可以在评论区说,我帮你写。
到此这篇关于使用Python批量整理文件的三种常见场景与处理方法的文章就介绍到这了,更多相关Python批量整理文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
