python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python桌面文件整理工具

使用Python写一个桌面文件自动整理工具

作者:EricZheng95

每天下载的文件堆满桌面,.zip、.pdf、.jpg 混在一起,想找的时候翻半天,这件事其实完全可以交给脚本处理,今天我们就用 Python 写一个桌面文件自动整理器,按文件类型自动分类到不同文件夹,需要的朋友可以参考下

前言

每天下载的文件堆满桌面,.zip、.pdf、.jpg 混在一起,想找的时候翻半天。这件事其实完全可以交给脚本处理——今天我们就用 Python 写一个桌面文件自动整理器,按文件类型自动分类到不同文件夹,全程无依赖、开箱即用。

这个脚本虽然只有 60 行代码,但涉及路径操作、正则匹配、日志记录三个实用技能,学会了可以扩展到任何批量文件处理场景。

主题介绍

我们要实现的功能:

  1. 扫描指定目录(默认桌面)的所有文件
  2. 根据文件扩展名将文件移动到对应的分类文件夹(文档、图片、视频、压缩包、代码等)
  3. 记录每次操作日志,方便回查
  4. 同名文件自动加后缀避免覆盖

核心思路:用 osshutil 模块完成移动,用字典映射扩展名到分类,用 logging 记录轨迹。

环境准备

创建项目目录结构:

mkdir ~/desktop-organizer
cd ~/desktop-organizer
touch organizer.py organize_log.json

实操步骤

步骤 1:定义分类规则

先建一个扩展名到文件夹名的映射字典。这是整个脚本的核心配置:

# 扩展名 → 目标文件夹名
CATEGORY_MAP = {
    "pdf": "文档",
    "doc": "文档", "docx": "文档", "txt": "文档", "md": "文档",
    "jpg": "图片", "jpeg": "图片", "png": "图片", "gif": "图片",
    "svg": "图片", "webp": "图片", "bmp": "图片",
    "mp4": "视频", "mov": "视频", "avi": "视频", "mkv": "视频",
    "mp3": "音频", "wav": "音频", "flac": "音频",
    "zip": "压缩包", "rar": "压缩包", "7z": "压缩包", "tar.gz": "压缩包",
    "py": "代码", "js": "代码", "html": "代码", "css": "代码",
    "exe": "可执行", "dmg": "可执行", "deb": "可执行",
}

# 默认兜底分类
DEFAULT_CATEGORY = "其他"

步骤 2:编写整理逻辑

完整可执行脚本 organizer.py

#!/usr/bin/env python3
"""桌面文件自动整理工具"""

import os
import shutil
import logging
from pathlib import Path

# 配置日志
logging.basicConfig(
    filename="organize_log.json",
    level=logging.INFO,
    format="%(asctime)s | %(message)s"
)

CATEGORY_MAP = {
    "pdf": "文档", "doc": "文档", "docx": "文档", "txt": "文档", "md": "文档",
    "jpg": "图片", "jpeg": "图片", "png": "图片", "gif": "图片",
    "mp4": "视频", "mov": "视频", "mp3": "音频", "wav": "音频",
    "zip": "压缩包", "rar": "压缩包", "7z": "压缩包",
    "py": "代码", "js": "代码", "html": "代码",
}
DEFAULT_CATEGORY = "其他"


def get_category(filename: str) -> str:
    """根据文件名返回分类文件夹名"""
    ext = Path(filename).suffix.lower().lstrip(".")
    return CATEGORY_MAP.get(ext, DEFAULT_CATEGORY)


def move_file(src: Path, dest_dir: Path) -> Path:
    """移动文件,同名时自动加 _1, _2 后缀"""
    dest_dir.mkdir(parents=True, exist_ok=True)
    dest = dest_dir / src.name
    if dest.exists():
        stem, suffix = src.stem, src.suffix
        counter = 1
        while dest.exists():
            dest = dest_dir / f"{stem}_{counter}{suffix}"
            counter += 1
    shutil.move(str(src), str(dest))
    logging.info(f"移动: {src.name} -> {dest}")
    return dest


def organize(target_dir: str = None):
    """扫描并整理目标目录"""
    if target_dir is None:
        target_dir = os.path.expanduser("~/Desktop")

    root = Path(target_dir).resolve()
    if not root.exists():
        print(f"❌ 目录不存在: {root}")
        return

    count = 0
    for item in root.iterdir():
        if not item.is_file():
            continue
        if item.name.startswith("."):  # 跳过隐藏文件
            continue

        category = get_category(item.name)
        dest_dir = root / category
        move_file(item, dest_dir)
        count += 1

    print(f"✅ 完成,共整理 {count} 个文件")
    logging.info(f"=== 本次整理 {count} 个文件 ===")


if __name__ == "__main__":
    organize()

步骤 3:运行脚本

# 整理桌面(默认)
python3 organizer.py
# 整理指定目录
python3 organizer.py -- /path/to/messy/folder

运行后桌面会变成这样的结构:

Desktop/
├── 文档/
│   ├── 简历.pdf
│   └── 笔记.md
├── 图片/
│   ├── 截图.png
│   └── 头像.jpg
├── 压缩包/
│   └── 素材包.zip
├── 代码/
│   └── app.js
└── 其他/
    └── README

步骤 4:表格对比 — 整理前后效果

维度整理前整理后
文件位置全部混在桌面根目录按类型分到子文件夹
查找速度肉眼翻找,30 秒+直接进对应文件夹
文件数量(示例)47 个文件平铺5 个文件夹各装 1-20 个
重复文件风险手动改名容易出错脚本自动追加 _1, _2 后缀
可追溯性无记录organize_log.json 记录每次操作

步骤 5:进阶 — 添加定时自动整理

方案 A:Linux / macOS 用 cron

# 每周一、四早上 9 点自动整理
0 9 * * 1,4 cd ~/desktop-organizer && python3 organizer.py

方案 B:Windows 用任务计划程序

  1. 打开"任务计划程序"
  2. 创建基本任务,名称填"桌面整理"
  3. 触发器选择"每周",指定周一和周四
  4. 操作选择"启动程序",程序填 python.exe,参数填 organizer.py 的绝对路径

方案 C:脚本内加防重复标记

MARKER_FILE = Path.home() / ".desktop_organize_done"

def should_run() -> bool:
    """避免同一天重复整理"""
    if MARKER_FILE.exists():
        last_run = MARKER_FILE.stat().st_mtime
        if (time.time() - last_run) < 86400:  # 24 小时内
            return False
    return True

总结

今天用 60 行 Python 代码实现了一个桌面文件自动整理器,核心收获:

  1. pathlib.Path** 比 os.path 更直观** — item.is_file()item.suffix 写起来更清晰
  2. 同名处理是实战必须考虑的细节 — 加后缀 _1 的逻辑虽然简单,但能避免真实场景中的数据丢失
  3. 日志记录是脚本工程的标配 — 有了日志,出问题能快速定位,也能做统计

这个脚本可以按自己需求扩展:比如加入"移动前先备份到 trash 目录"、“按创建时间分月归档”、“整合到 Hermes 定时任务里每天自动跑”。

以上就是使用Python写一个桌面文件自动整理工具的详细内容,更多关于Python桌面文件整理工具的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文