在开始编写代码之前,我们需要确保电脑上已经安装了Python环境。本指南基于Python 3.x版本编写,代码完全兼容Windows、macOS和Linux系统。
打开终端(Windows下按Win+R输入cmd)或命令行工具,输入以下命令检查Python是否已安装:
python --version
如果未安装,请直接访问Python官网 https://www.python.org/downloads/ 下载对应系统的安装包。安装时务必勾选底部的 "Add Python to PATH" 选项,这一步至关重要,否则系统无法识别Python命令。
本脚本仅使用Python标准库(os, shutil, datetime),无需安装任何第三方库,直接复制下方代码即可运行。
我们将构建一个具备以下功能的自动化工具:
为了方便操作,我们将脚本设计为针对“下载文件夹”进行整理,当然你可以随意修改路径变量。
这是脚本的核心部分。我们需要定义一个字典,用来映射文件后缀名和目标文件夹名称。以下代码片段展示了如何定义分类规则:
```python
定义文件分类映射表
FILE_MAP = {
"图片": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg"],
"文档": [".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt"],
"视频": [".mp4", ".avi", ".mkv", ".mov", ".flv"],
"音乐": [".mp3", ".wav", ".flac", ".aac"],
"安装包": [".exe", ".msi", ".dmg", ".pkg"],
"压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"]
}
```
接下来,我们需要编写主逻辑。程序会遍历指定目录下的所有文件,判断其后缀名属于哪个分类,然后将其移动到对应的子文件夹中。如果子文件夹不存在,则使用 os.makedirs 自动创建。
在移动文件时,直接使用 shutil.move 可能会因为目标路径已有同名文件而报错。我们需要封装一个安全的移动函数。
逻辑如下:
```python
import os
import shutil
import datetime
def safe_move(src, dst):
if os.path.exists(dst):
base, extension = os.path.splitext(dst)
counter = 1
while os.path.exists(f"{base}({counter}){extension}"):
counter += 1
dst = f"{base}({counter}){extension}"
shutil.move(src, dst)
print(f"已移动: {os.path.basename(src)} -> {dst}")
```
为了确保你能零门槛落地,下面提供完整的、可直接运行的脚本代码请新建一个文本文档,将以下代码粘贴进去,并将文件保存为 file_organizer.py。
```python
import os
import shutil
import sys
================= 配置区域 =================
设置需要整理的文件夹路径,默认为当前用户的下载文件夹
Windows示例: r"C:\Users\YourName\Downloads"
Mac/Linux示例: "/Users/YourName/Downloads"
TARGET_DIR = os.path.expanduser("~") + os.sep + "Downloads"
定义文件分类规则
CATEGORY_MAP = {
"01_图片": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg", ".webp"],
"02_文档": [".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".epub"],
"03_视频": [".mp4", ".avi", ".mkv", ".mov", ".flv", ".wmv"],
"04_音频": [".mp3", ".wav", ".flac", ".aac", ".m4a"],
"05_软件": [".exe", ".msi", ".dmg", ".pkg", ".apk"],
"06_压缩": [".zip", ".rar", ".7z", ".tar", ".gz", ".iso"]
}
是否开启按日期归档(True/False)
ENABLE_DATE_ARCHIVE = False
================= 核心逻辑 =================
def get_file_category(filename):

"""根据文件名获取对应的分类文件夹名"""
ext = os.path.splitext(filename)[1].lower()
for category, extensions in CATEGORY_MAP.items():
if ext in extensions:
return category
return "99_其他"
def safe_move_file(src_path, dst_path):
"""安全移动文件,处理重名冲突"""
if os.path.exists(dst_path):
base, ext = os.path.splitext(dst_path)
counter = 1
while os.path.exists(f"{base}({counter}){ext}"):
counter += 1
dst_path = f"{base}({counter}){ext}"
shutil.move(src_path, dst_path)
print(f"[OK] 移动成功: {os.path.basename(src_path)}")
def organize_files():
print(f"开始整理目录: {TARGET_DIR}")
if not os.path.exists(TARGET_DIR):
print(f"错误: 目录不存在 - {TARGET_DIR}")
return
遍历目标目录
for filename in os.listdir(TARGET_DIR):
full_path = os.path.join(TARGET_DIR, filename)
跳过目录和脚本自身
if os.path.isdir(full_path) or filename == os.path.basename(__file__):
continue
获取目标分类文件夹
category_folder = get_file_category(filename)
dest_folder_path = os.path.join(TARGET_DIR, category_folder)
如果开启日期归档,在分类文件夹下再创建年月文件夹
if ENABLE_DATE_ARCHIVE:
获取文件最后修改时间
mod_time = os.path.getmtime(full_path)
date_str = datetime.datetime.fromtimestamp(mod_time).strftime("%Y-%m")
dest_folder_path = os.path.join(dest_folder_path, date_str)
创建目标文件夹(如果不存在)
if not os.path.exists(dest_folder_path):
os.makedirs(dest_folder_path)
print(f"[INFO] 创建文件夹: {category_folder}")
构建最终目标路径
dest_file_path = os.path.join(dest_folder_path, filename)
执行移动
try:
safe_move_file(full_path, dest_file_path)
except Exception as e:
print(f"[ERROR] 移动失败 {filename}: {e}")
if __name__ == "__main__":
organize_files()
input("\n按回车键退出...")
```
代码保存完成后,我们进行实际测试。
步骤 1:打开命令行终端,切换到你保存脚本的目录。例如,你把脚本保存在桌面上:
cd Desktop
步骤 2:运行脚本:
python file_organizer.py
脚本运行后,你会看到终端窗口输出每一项文件的移动记录。此时打开你的“下载”文件夹,你会发现所有的图片已经被移动到了“01_图片”文件夹中,文档移动到了“02_文档”文件夹中,以此类推。
为了避免每次都需要手动运行脚本,我们可以将此任务设置为系统定时任务,实现真正的自动化。
设置完成后,每次电脑启动或登录时,系统都会自动运行此脚本,瞬间帮你整理好杂乱的下载文件。