【AI技术_工具_资讯】用 Python + AI 构建智能文件分类整理工具
前言你的桌面是不是堆满了各种文件截图、PDF、Markdown、CSV、各种命名乱七八遭的文件……每次找文件都要翻半天。手动整理又无聊又耗时。这篇博客教你用 Python 调用 AI 模型自动识别文件内容语义把文件归类到对应文件夹。全程无需手动干预一个脚本跑完桌面清清爽爽。主题介绍传统文件整理方案通常是基于文件扩展名或文件名关键词做规则匹配——但这种方法很脆弱notes.pdf和contract.pdf都是 PDF应该放不同文件夹IMG_2026.jpg和photo_backup.jpg文件名毫无语义新建的格式比如.env、.yaml规则库得跟着更新AI 语义分类方案的思路读取文件内容文本类或文件名路径二进制类让大模型判断这个文件应该放在哪个类别然后把文件移过去。核心优势✅ 理解文件真实内容语义不是死板规则✅ 零配置启动AI 自动学习你的文件类型✅ 可解释每次分类结果都可追溯✅ 一次编写持续受益环境准备依赖安装pipinstallopenai只要openai这个库支持任何 OpenAI API 兼容的模型Claude、Gemini、本地模型都行。配置文件在项目目录创建.env# 支持任意 OpenAI API 兼容模型exportOPENAI_API_KEYsk-xxxexportOPENAI_API_BASEhttps://api.openai.com/v1exportAI_MODELclaude-sonnet-4-20250514实操步骤步骤1定义文件分类策略首先我们定义一个类别映射。类别用自然语言描述AI 会根据文件内容自动匹配# categorize.pyCATEGORIES{documents:正式文档、报告、合同、简历、简历等,code:源代码文件、脚本、配置文件.py, .js, .ts, .json, .yaml, .toml,notes:学习笔记、日记、备忘、草稿,data:数据文件.csv, .xlsx, .sqlite, .parquet,media:图片、视频、音频等媒体文件,downloads:临时下载、安装包、压缩包,finance:发票、账单、报销、财务相关,trash:不确定或应该丢弃的文件}步骤2编写文件内容读取器不同类型文件读取方式不同我们做个适配器# reader.pyimportmimetypesfrompathlibimportPathdefread_file_content(file_path:Path,max_bytes:int8000)-str|None:读取文件内容返回文本或 None二进制文件跳过try:extfile_path.suffix.lower()# 文本类文件直接读取text_exts{.txt,.md,.json,.yaml,.yml,.toml,.csv,.xml,.html,.css,.py,.js,.ts,.java,.go,.rs,.sh,.sql,.ini,.cfg}ifextintext_exts:returnfile_path.read_text(encodingutf-8,errorsignore)[:max_bytes]# PDF 文件需要 pdfplumber可选ifext.pdf:try:importpdfplumberwithpdfplumber.open(str(file_path))aspdf:return\n.join(page.extract_text()orforpageinpdf.pages[:2])[:max_bytes]exceptImportError:returnNone# 二进制文件图片、视频、压缩包等返回 NonereturnNoneexceptExceptionase:print(f ⚠️ 读取失败{file_path.name}:{e})returnNone步骤3编写 AI 分类器这是核心——调用大模型做语义分类# classifier.pyimportjsonfromopenaiimportOpenAIfrompathlibimportPath clientOpenAI()defclassify_file(file_name:str,file_content:str|None,categories:dict)-str: 调用 AI 模型对文件进行分类 参数 file_name: 文件名含扩展名 file_content: 文件文本内容可能为 None categories: 可用类别字典 {category_name: description} 返回 匹配到的类别名称 # 构建类别选项只给类别名和简短描述category_options\n.join(f{i1}. **{name}** —{desc}fori,(name,desc)inenumerate(categories.items()))# 构建提示词content_previewfile_contentiffile_contentelse二进制文件无法读取内容ifcontent_previewandlen(content_preview)2000:content_previewcontent_preview[:2000]\n...已截断promptf你是一个文件整理助手。请根据文件信息判断它最适合归入以下哪个类别 文件名{file_name}文件内容预览{content_preview}可选类别 {category_options} 请只输出类别编号不要输出其他内容。 response client.chat.completions.create( modelPath.home() / .env # 实际项目中用 config 读取 modelclaude-sonnet-4-20250514, messages[ {role: system, content: 你是一个精准的文件分类助手请只输出类别编号数字。}, {role: user, content: prompt}, ], temperature0, max_tokens5, ) # 解析输出只取第一个数字 result response.choices[0].message.content.strip() for i, cat in enumerate(categories.keys()): if str(i 1) result: return cat return trash # 兜底 省钱技巧max_tokens5把输出压到最小temperature0保证确定性。单次分类成本约 0.005 元1000 个文件才 5 块钱。步骤4编写文件移动执行器分类完成后把文件安全移动到目标文件夹# organizer.pyfrompathlibimportPathfromdatetimeimportdatetimeimportshutildeforganize_files(source_dir:str,categories:dict,dry_run:boolTrue)-list[dict]: 遍历源目录对每个文件进行分类并移动 参数 source_dir: 待整理目录路径 categories: 类别配置 dry_run: True只预览不执行False实际移动 返回 分类记录列表 [{file_name, category, source_path, target_path}] srcPath(source_dir)records[]forfile_pathinsrc.iterdir():ifnotfile_path.is_file()orfile_path.name.startswith(.):continue# 读取内容contentread_file_content(file_path)# AI 分类categoryclassify_file(file_path.name,content,categories)target_dirsrc/categoryifdry_run:print(f {file_path.name}→{category}/)records.append({file:file_path.name,category:category,target:str(target_dir/file_path.name)})continue# 实际移动target_dir.mkdir(parentsTrue,exist_okTrue)target_pathtarget_dir/file_path.name# 处理重名文件counter1whiletarget_path.exists():target_pathtarget_dir/f{file_path.stem}_{counter}{file_path.suffix}counter1shutil.move(str(file_path),str(target_path))print(f ✅{file_path.name}→{category}/)records.append({file:file_path.name,category:category,target:str(target_path)})returnrecords步骤5整合为主入口脚本# main.pyimportosfromdotenvimportload_dotenvfromorganizerimportorganize_files,CATEGORIESdefmain():load_dotenv()# 要整理的目录target_diros.getenv(ORGANIZE_DIR,./Downloads)print(f 开始扫描目录:{target_dir})print(f 可用类别:{, .join(CATEGORIES.keys())})print(-*40)# 先预览recordsorganize_files(target_dir,CATEGORIES,dry_runTrue)print(-*40)print(f 预览结果:{len(records)}个文件)# 确认执行ifinput(\n确认执行移动(y/n): ).strip().lower()y:print(\n⚡ 开始移动文件...)organize_files(target_dir,CATEGORIES,dry_runFalse)print( 整理完成)if__name____main__:main()步骤6运行并验证exportORGANIZE_DIR./Desktoppython main.py输出示例 开始扫描目录: ./Desktop 可用类别: documents, code, notes, data, media, downloads, finance, trash ──────────────────────────────────────── resume_final_v3.pdf → documents/ screenshot_20260712.png → media/ notes_july.md → notes/ api_keys.json → code/ expense_report.xlsx → finance/ ──────────────────────────────────────── 预览结果: 5 个文件 确认执行移动(y/n): y ⚡ 开始移动文件... ✅ resume_final_v3.pdf → documents/ ✅ screenshot_20260712.png → media/ ✅ notes_july.md → notes/ ✅ api_keys.json → code/ ✅ expense_report.xlsx → finance/ 整理完成扩展思路定时自动运行用 cron 每周自动扫描 Downloads 目录02* *0cd/path/to/projectpython main.py--autoorganize.log21增量模式只处理昨天及之后创建的文件避免重复分类自定义类别在CATEGORIES中按需添加你的文件类型日志记录每次分类结果写入 SQLite方便日后回查和纠正总结这个工具的核心价值在于把文件该放哪这个判断交给 AI而不是写死规则。文本文件靠内容语义分类准确率远超关键词匹配二进制文件靠文件名上下文判断覆盖大多数场景总成本极低1000 文件约 5 元每周跑一次几乎免费代码约 150 行可复用、可扩展下次看到桌面堆成山直接跑这个脚本一分钟内整理完毕。 提示首次运行时务必先用dry_runTrue预览确认分类结果满意后再正式执行。

相关新闻

【Java锁系列】从 CPU 缓存到 Java 锁:一文吃透 Java 锁机制底层体系(完整递进版)

【Java锁系列】从 CPU 缓存到 Java 锁:一文吃透 Java 锁机制底层体系(完整递进版)

作者:CodeStats大家好,我是 CodeStats。一个在底层技术上"考古"了四年的硬核爱好者,也是 WWAIC(全周项目AI编程) 范式的提出者和实践者。我曾手写过一个完整的 Java Web 框架(从 IoC 容器到嵌入式…

2026/7/14 0:58:26阅读更多 →
《源纹天书》第一百六十一章至第一百六十五章:开源化宣言、元定义的力量、栈帧重构、容器道场升级、技术债的化身!

《源纹天书》第一百六十一章至第一百六十五章:开源化宣言、元定义的力量、栈帧重构、容器道场升级、技术债的化身!

第一百六十一章 开源化宣言——源世界的第一次全体大会归元圣域,核心大殿。CodeStats站在大殿中央的高台上,面前悬浮着一块巨大的金色玉简——那是他花了七天七夜整理出的《归零者传承源世界底层源码解析》。玉简中记载了四大基石的完整结构,…

2026/7/14 0:58:26阅读更多 →
AIGC检测用什么工具?2026年主流合规工具整理分享

AIGC检测用什么工具?2026年主流合规工具整理分享

2026年国内高校、期刊对学术内容的原创性审核不断升级,除了传统的论文重复率检测,AIGC生成内容检测已经成为必查项。本科毕业论文抽检、硕士学位论文答辩、职称评审论文送审、期刊投稿初审,一旦AI生成内容占比不符合官方要求,直接…

2026/7/14 0:53:25阅读更多 →
TV Bro电视浏览器终极指南:如何在智能电视上轻松上网冲浪?

TV Bro电视浏览器终极指南:如何在智能电视上轻松上网冲浪?

TV Bro电视浏览器终极指南:如何在智能电视上轻松上网冲浪? 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 你是否曾经在智能电视上尝试浏览网页&…

2026/7/14 14:40:15阅读更多 →
3步破解教材下载难题:tchMaterial-parser工具全攻略

3步破解教材下载难题:tchMaterial-parser工具全攻略

3步破解教材下载难题:tchMaterial-parser工具全攻略 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: …

2026/7/14 14:40:15阅读更多 →
AMD混合推理架构解析:Qwen2.5-7B-Instruct_rai_1.7.1_hybrid如何实现高效推理

AMD混合推理架构解析:Qwen2.5-7B-Instruct_rai_1.7.1_hybrid如何实现高效推理

AMD混合推理架构解析:Qwen2.5-7B-Instruct_rai_1.7.1_hybrid如何实现高效推理 【免费下载链接】Qwen2.5-7B-Instruct_rai_1.7.1_hybrid 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen2.5-7B-Instruct_rai_1.7.1_hybrid Qwen2.5-7B-Instruct_rai_1.…

2026/7/14 14:40:15阅读更多 →
HS2-HF_Patch技术架构解析:游戏增强补丁的系统化实现方案

HS2-HF_Patch技术架构解析:游戏增强补丁的系统化实现方案

HS2-HF_Patch技术架构解析:游戏增强补丁的系统化实现方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch作为Honey Select 2游戏的核心…

2026/7/14 14:40:15阅读更多 →
如何用DiskInfo实现专业级硬盘健康监控:5个必知技巧

如何用DiskInfo实现专业级硬盘健康监控:5个必知技巧

如何用DiskInfo实现专业级硬盘健康监控:5个必知技巧 【免费下载链接】DiskInfo DiskInfo based on CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/di/DiskInfo 在数字时代,数据安全至关重要,而硬盘健康监控是保护数据的第…

2026/7/14 14:40:15阅读更多 →
革命性超分辨率模型:Real-ESRGAN 128x128-tiles-amdnpu如何实现4倍图像质量飞跃

革命性超分辨率模型:Real-ESRGAN 128x128-tiles-amdnpu如何实现4倍图像质量飞跃

革命性超分辨率模型:Real-ESRGAN 128x128-tiles-amdnpu如何实现4倍图像质量飞跃 【免费下载链接】realesrgan-128x128-tiles-amdnpu 项目地址: https://ai.gitcode.com/hf_mirrors/amd/realesrgan-128x128-tiles-amdnpu 想要将低分辨率图像瞬间提升4倍清晰度…

2026/7/14 14:35:15阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →