2. 文件分类整理
任务说明
你的下载文件夹或工作目录中往往混杂着图片、文档、压缩包、脚本等多种类型文件,手动整理费时且容易出错。本案例实现一个Python脚本,扫描指定文件夹,根据文件扩展名将文件自动移动到对应的分类子文件夹(如“图片”“文档”“压缩包”“代码”“其他”),并处理重名文件避免覆盖。
实现代码
import os
import shutil
from pathlib import Path
# 扩展名分类映射
EXTENSION_MAP = {
'.jpg': '图片', '.jpeg': '图片', '.png': '图片', '.gif': '图片', '.bmp': '图片', '.svg': '图片',
'.txt': '文档', '.pdf': '文档', '.doc': '文档', '.docx': '文档', '.xls': '文档', '.xlsx': '文档', '.ppt': '文档', '.pptx': '文档',
'.zip': '压缩包', '.rar': '压缩包', '.7z': '压缩包', '.tar': '压缩包', '.gz': '压缩包',
'.py': '代码', '.js': '代码', '.html': '代码', '.css': '代码', '.java': '代码', '.cpp': '代码', '.c': '代码',
}
def classify_file(filename):
"""根据文件扩展名返回分类名称,未知类型归为'其他'"""
ext = Path(filename).suffix.lower()
return EXTENSION_MAP.get(ext, '其他')
def organize_folder(folder_path):
"""
将folder_path中的文件按扩展名移动到对应子文件夹。
返回移动的文件数量。
"""
folder = Path(folder_path)
if not folder.exists():
raise FileNotFoundError(f"文件夹不存在: {folder_path}")
moved_count = 0
for item in folder.iterdir():
# 跳过子文件夹本身
if item.is_dir():
continue
category = classify_file(item.name)
target_dir = folder / category
target_dir.mkdir(exist_ok=True)
# 处理重名:若目标已存在同名文件,则在文件名后加数字
target_path = target_dir / item.name
if target_path.exists():
base_name = item.stem
suffix = item.suffix
counter = 1
while True:
new_name = f"{base_name}_{counter}{suffix}"
target_path = target_dir / new_name
if not target_path.exists():
break
counter += 1
shutil.move(str(item), str(target_path))
moved_count += 1
return moved_count
if __name__ == '__main__':
# 使用示例:请将下方路径替换为你要整理的文件夹路径
target_folder = r"C:\Users\YourName\Downloads" # 修改为实际路径
count = organize_folder(target_folder)
print(f"整理完成,共移动 {count} 个文件")
运行与验证
运行方式:将上述代码保存为 organize_files.py,修改 target_folder 变量为你要整理的文件夹路径(建议先在一个测试文件夹中运行),然后在终端执行:
python organize_files.py
验证方法:
- 在测试文件夹中预先放入几个不同扩展名的文件(如
photo.jpg、report.pdf、archive.zip、script.py、notes.txt、unknown.xyz); - 运行脚本后,检查文件夹中是否自动生成了“图片”“文档”“压缩包”“代码”“其他”五个子文件夹;
- 确认每个文件已移动到对应分类子文件夹中,且原位置不再有该文件;
- 再放入一个与子文件夹中已有文件同名的文件(如再次放入
photo.jpg),重新运行脚本,确认新文件被重命名为photo_1.jpg且没有覆盖原文件。
判定标准:所有文件均按扩展名进入正确分类子文件夹,重名文件自动改名且无文件丢失,控制台输出移动文件数量与实际文件数一致,即视为通过。