当前位置: 首页 > news >正文

从零写一个Python文件批量整理器:自动按类型归档桌面文件

从零写一个Python文件批量整理器:自动按类型归档桌面文件

专栏:《从零写一个小工具》 | 语言:Python | 依赖:纯标准库

一、场景介绍

公司发的报表、浏览器下的安装包、临时截图、各种格式的文档……几个月不收拾,桌面和下载文件夹就能堆成山。手动拖文件分类?太费时间,而且拖不了几次就放弃了。

这篇文章带你从零写一个小工具,把指定文件夹里的文件按类型自动归类,图片进图片夹,文档进文档夹,可执行文件单独放,整理完还给你输出一份统计报告。代码不到100行,拷走就能跑。

二、需求说明

这个小工具要解决这几个实际问题:

  1. 指定一个待整理目录(比如桌面或下载文件夹)
  2. 按文件扩展名自动分类:.jpg/.png归图片,.docx/.pdf归文档,.exe/.msi归安装包,等等
  3. 如果目标分类文件夹不存在,自动创建
  4. 遇到同名文件不要覆盖,自动重命名保留
  5. 整理完打印一份统计报告:每类多少文件,总共多少

不需要装任何第三方库,只用 Python 自带的osshutilpathlib

三、环境准备

Python 3.7+ 就行,不用装任何东西。打开终端确认一下:

python--version

四、逐段代码编写

4.1 定义文件类型映射

先把扩展名和分类文件夹对应起来。这是整个工具的核心规则,你可以按自己习惯改:

CATEGORY_MAP={"图片":[".jpg",".jpeg",".png",".gif",".bmp",".webp",".svg"],"文档":[".doc",".docx",".pdf",".txt",".md",".xls",".xlsx",".ppt",".pptx",".csv"],"视频":[".mp4",".avi",".mov",".mkv",".flv",".wmv"],"音频":[".mp3",".wav",".flac",".aac",".ogg",".m4a"],"压缩包":[".zip",".rar",".7z",".tar",".gz",".bz2"],"安装包":[".exe",".msi",".dmg",".pkg",".deb",".rpm"],"代码":[".py",".js",".html",".css",".java",".c",".cpp",".go",".rs",".json",".xml",".yaml",".yml"],}

这里有个设计细节:用一个扩展名到分类的反向字典,后续查找更快,不用每次遍历:

EXT_TO_CATEGORY={}forcategory,extsinCATEGORY_MAP.items():forextinexts:EXT_TO_CATEGORY[ext.lower()]=category

为什么要转小写?Windows 上扩展名可能是.PDF.pdf,统一转小写再匹配,避免漏网之鱼。

4.2 获取分类文件夹名称

传入一个文件路径,返回它该去哪个分类文件夹:

frompathlibimportPathdefget_category(file_path:Path)->str:"""根据扩展名返回分类文件夹名称"""ext=file_path.suffix.lower()# 获取扩展名并转小写returnEXT_TO_CATEGORY.get(ext,"其他")# 未知类型丢进"其他"

Path.suffixpathlib的方法,直接拿到带点的扩展名,比如.jpg,比用字符串分割干净多了。

4.3 处理重名文件

同一个分类里可能已经有一个报告.pdf,再移一个报告.pdf过来,默认会覆盖。我们要保留两份:

defsafe_target_path(target_dir:Path,original_name:str)
http://www.jsqmd.com/news/828377/

相关文章:

  • Winhance中文版:轻松掌控Windows系统的终极优化工具
  • 告别专用烧录器:用Tera Term和Ymodem协议给GD32/STM32远程升级固件(附完整数据包分析)
  • 【大白话说Java面试题 第54题】【JVM篇】第14题:什么是可达性分析算法?
  • B2B 采购下单前,怎么把一家工厂供应商的背景查清楚?一份能照着做的尽调清单
  • 夏季高温常态化来袭,工业冷风机为工厂筑牢清凉防线
  • web前端转java是不是最快的路径了,对比c++而言
  • 告别梯度下降的震荡:用Python手把手实现共轭梯度法(CG)求解线性方程组
  • 基于LLM的智能代码审查工具Checkmate:从原理到CI/CD集成实战
  • 物联网与边缘计算在智慧粮仓环境监控系统中的应用实践
  • 如何优雅地获取B站评论数据?5个实用技巧告别403烦恼
  • GBase 8a 多业务共用集群时先把 VC 边界划清
  • 悦川2026热销花色推荐
  • LSM6DSOW陀螺仪轮询驱动:从I2C/SPI配置到数据读取全解析
  • 基于i.MX8M Plus NPU的智能路侧单元(RSU)边缘AI实战
  • Docker 安装 MySQL,隔离环境 + 快速部署,开发必备
  • UI-TARS桌面版:零门槛智能桌面助手,用自然语言解放你的双手
  • Taotoken API密钥管理与访问控制功能实践分享
  • Claude终端集成指南:命令行AI助手安装、配置与实战应用
  • 运放电路分析核心:虚断与虚短原理及五大经典电路实战
  • 确定性训练与 Batch 不变性:大模型调试的工程基础
  • LSM6DS3TR-C磁力计驱动与9轴传感器融合数据获取指南
  • 开源桌面效率工具moyu:用Tauri与Electron打造无感生产力看板
  • 终极FF14钓鱼辅助:渔人的直感完整使用指南与技巧
  • AD19实战指南:从差分对创建到蛇形等长的PCB信号完整性设计
  • Zotero附件清理神器:告别文献管理中的“幽灵文件“
  • npm、yarn、pnpm缓存清理实战:从基础命令到自动化脚本
  • 快速搞定教材!低查重AI教材生成,开启高效写作新模式!
  • 零人工手写,5个月拼出百万行代码!深度拆解 OpenAI 颠覆性的 “Harness Engineering” 软件开发新范式
  • 企业信创即时通讯选型怎么选?适配龙芯鲲鹏、内网部署+业务集成才靠谱 - 小天互连即时通讯
  • MATLAB量化函数quantize的“隐藏关卡”:从单精度到自定义浮点的完整配置指南