python

关注公众号 jb51net

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

Python结合AI打造一个桌面文件自动整理助手

作者:AI效率工坊

桌面文件堆积如山,手动整理费时又低效,本文详细介绍了一个用Python+AI开发的桌面文件整理助手,能自动分类混乱的桌面文件,找文件效率提升3倍,彻底告别整理拖延症

用Python+AI打造一个桌面文件整理助手,让混乱的桌面瞬间清爽

一、痛点:桌面文件的"灾难现场"

我的桌面曾经是这样的:

二、核心思路:AI智能分类

不用手动设置规则,让AI根据文件名智能判断文件类型:

三、完整代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AI文件整理助手 - 自动分类桌面文件
作者:技术实战派
"""

import os
import shutil
from pathlib import Path
from datetime import datetime
class AIFileOrganizer:
    """AI驱动的文件整理器"""
  
    def __init__(self, source_dir, target_dir=None):
        self.source_dir = Path(source_dir)
        self.target_dir = Path(target_dir) if target_dir else self.source_dir / "已整理"
        self.stats = {"moved": 0, "skipped": 0, "errors": 0}
      
        # 定义分类规则
        self.rules = {
            "截图": {
                "keywords": ["截图", "screen", "screencapture", "qq截图", "微信截图"],
                "exts": [".png", ".jpg", ".jpeg"],
                "folder": "图片/截图"
            },
            "合同文档": {
                "keywords": ["合同", "协议", "agreement", "contract"],
                "exts": [".pdf", ".doc", ".docx"],
                "folder": "文档/合同"
            },
            "财务票据": {
                "keywords": ["发票", "收据", "invoice", "receipt", "报销"],
                "exts": [".pdf", ".png", ".jpg"],
                "folder": "文档/财务"
            },
            "图片素材": {
                "keywords": ["img", "image", "photo", "pic"],
                "exts": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"],
                "folder": "图片/素材"
            },
            "PDF文档": {
                "exts": [".pdf"],
                "folder": "文档/PDF"
            },
            "办公软件": {
                "keywords": ["word", "excel", "ppt", "doc", "xls"],
                "exts": [".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx"],
                "folder": "文档/办公"
            },
            "压缩包": {
                "exts": [".zip", ".rar", ".7z", ".tar", ".gz"],
                "folder": "压缩包"
            },
            "安装包": {
                "keywords": ["setup", "install", "installer"],
                "exts": [".exe", ".msi", ".dmg", ".pkg"],
                "folder": "软件/安装包"
            },
            "视频": {
                "exts": [".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv"],
                "folder": "视频"
            },
            "音频": {
                "exts": [".mp3", ".wav", ".flac", ".aac", ".ogg"],
                "folder": "音频"
            },
            "代码文件": {
                "exts": [".py", ".js", ".html", ".css", ".java", ".cpp", ".c", ".go", ".rs"],
                "folder": "代码"
            }
        }
  
    def ai_classify(self, filename):
        """
        AI智能分类:根据文件名和扩展名判断类型
        """
        name_lower = filename.lower()
        ext = Path(filename).suffix.lower()
      
        # 按优先级匹配规则
        for category, rule in self.rules.items():
            # 检查关键词
            keywords = rule.get("keywords", [])
            if any(kw.lower() in name_lower for kw in keywords):
                return rule["folder"]
          
            # 检查扩展名
            exts = rule.get("exts", [])
            if ext in exts:
                return rule["folder"]
      
        # 默认分类:按日期
        return f"其他/{datetime.now().strftime('%Y-%m')}"
  
    def organize(self, dry_run=False):
        """
        执行整理
        :param dry_run: 试运行模式(只打印,不移动)
        """
        print(f"📁 源目录: {self.source_dir}")
        print(f"📂 目标目录: {self.target_dir}")
        print(f"🔍 扫描文件中...\n")
      
        # 遍历源目录
        for item in self.source_dir.iterdir():
            if item.is_dir():
                continue  # 跳过目录
          
            filename = item.name
          
            # 跳过脚本自身
            if filename == os.path.basename(__file__):
                continue
          
            # AI分类
            category = self.ai_classify(filename)
            target_folder = self.target_dir / category
          
            # 显示结果
            action = "【模拟】" if dry_run else "【移动】"
            print(f"{action} {filename:<30} → {category}")
          
            if not dry_run:
                try:
                    # 创建目标目录
                    target_folder.mkdir(parents=True, exist_ok=True)
                  
                    # 处理重名文件
                    target_path = target_folder / filename
                    counter = 1
                    while target_path.exists():
                        stem = Path(filename).stem
                        suffix = Path(filename).suffix
                        target_path = target_folder / f"{stem}_{counter}{suffix}"
                        counter += 1
                  
                    # 移动文件
                    shutil.move(str(item), str(target_path))
                    self.stats["moved"] += 1
                  
                except Exception as e:
                    print(f"  ❌ 错误: {e}")
                    self.stats["errors"] += 1
            else:
                self.stats["moved"] += 1
      
        # 打印统计
        print(f"\n{'='*50}")
        print(f"📊 整理完成!")
        print(f"   已处理: {self.stats['moved']} 个文件")
        print(f"   错误: {self.stats['errors']} 个")
        print(f"{'='*50}")
def main():
    """主函数"""
    import argparse
  
    parser = argparse.ArgumentParser(description='AI文件整理助手')
    parser.add_argument('path', nargs='?', default='.', help='要整理的目录(默认当前目录)')
    parser.add_argument('--output', '-o', help='输出目录(默认在源目录创建"已整理")')
    parser.add_argument('--dry-run', '-d', action='store_true', help='试运行模式(不实际移动文件)')
  
    args = parser.parse_args()
  
    # 创建整理器
    organizer = AIFileOrganizer(args.path, args.output)
  
    # 执行整理
    organizer.organize(dry_run=args.dry_run)
if __name__ == "__main__":
    main()

四、使用方法

安装依赖

# 无需额外依赖,使用Python标准库
python --version  # 需要 Python 3.6+

试运行(推荐先测试)

python file_organizer.py ~/Desktop --dry-run

正式整理

# 整理桌面
python file_organizer.py ~/Desktop
# 整理下载文件夹
python file_organizer.py ~/Downloads
# 指定输出目录
python file_organizer.py ~/Desktop -o ~/Documents/已整理

五、运行效果

整理前:

桌面/
├── 微信截图_20260402123456.png
├── 合同-技术服务-v3.pdf
├── 发票-办公用品.jpg
├── setup_python_3.12.exe
├── project_backup.zip
├── 临时笔记.txt
└── ...

整理后:

已整理/
├── 图片/
│   └── 截图/
│       └── 微信截图_20260402123456.png
├── 文档/
│   ├── 合同/
│   │   └── 合同-技术服务-v3.pdf
│   └── 财务/
│       └── 发票-办公用品.jpg
├── 软件/
│   └── 安装包/
│       └── setup_python_3.12.exe
├── 压缩包/
│   └── project_backup.zip
└── 其他/
    └── 2026-04/
        └── 临时笔记.txt

六、进阶扩展

添加自定义规则

# 在 __init__ 中添加
self.rules["我的项目"] = {
    "keywords": ["项目", "project"],
    "exts": [".md", ".txt"],
    "folder": "项目文档"
}

按文件大小分类

def classify_by_size(self, file_path):
    size = file_path.stat().st_size
    if size > 100 * 1024 * 1024:  # > 100MB
        return "大文件"
    return None

定时自动整理(Windows任务计划)

# 创建定时任务,每天自动整理桌面
schtasks /create /tn "AI文件整理" /tr "python C:\tools\file_organizer.py %USERPROFILE%\Desktop" /sc daily /st 18\:00

七、踩坑记录

中文文件名乱码:使用 Path 对象处理,避免编码问题

文件被占用:跳过正在使用的文件,记录错误日志

重复文件名:自动添加序号,避免覆盖

误分类:关键词匹配优先级高于扩展名

八、总结

这个脚本帮我:

到此这篇关于Python结合AI打造一个桌面文件自动整理助手的文章就介绍到这了,更多相关Python桌面文件整理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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