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

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

前言

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

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

主题介绍

我们要实现的功能:

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

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

环境准备

  • Python 3.8+(系统自带即可,无需第三方库)
  • Windows 桌面路径:C:\Users\用户名\Desktop
  • macOS 桌面路径:~/Desktop
  • Linux 桌面路径:~/Desktop

创建项目目录结构:

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桌面文件整理工具的资料请关注脚本之家其它相关文章!

相关文章

  • Python语言中的Selenium环境搭建

    Python语言中的Selenium环境搭建

    本文主要介绍了Python语言中的Selenium环境搭建,Python+Selenium这篇文章将不断的持续更新和重构,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python tempfile模块生成临时文件和临时目录

    Python tempfile模块生成临时文件和临时目录

    这篇文章主要介绍了Python tempfile模块生成临时文件和临时目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法

    Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法

    这篇文章主要介绍了Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python中tell()方法的使用详解

    Python中tell()方法的使用详解

    这篇文章主要介绍了Python中tell()方法的使用详解,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python中的None与 NULL(即空字符)的区别详解

    Python中的None与 NULL(即空字符)的区别详解

    这篇文章主要介绍了Python中的None与 NULL(即空字符)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 关于pycharm卡死原因分析

    关于pycharm卡死原因分析

    这篇文章主要介绍了关于pycharm卡死原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 深入理解Python中__init__.py文件

    深入理解Python中__init__.py文件

    本文主要介绍了深入理解Python中__init__.py文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python中文竖排显示的方法

    Python中文竖排显示的方法

    这篇文章主要介绍了Python中文竖排显示的方法,可实现Python将中文竖排输出显示的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python实现三种字符串格式化方法(%、format、f-string)

    python实现三种字符串格式化方法(%、format、f-string)

    本文主要介绍了python实现三种字符串格式化方法,主要包括%、format、f-string,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • python3 图片referer防盗链的实现方法

    python3 图片referer防盗链的实现方法

    本篇文章主要介绍了python3 图片referer防盗链的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论