六十来行python代码完成一个文件分类器
你的桌面是否像这样的一样被各种文件给堆满了,但是每一个文件又不清楚是否后面还有作用,也不敢删除,自己一个一个转移又太麻烦了。没关系,今天我带大家用python一起来做一个文件归类器,一键进行分类,再也不会看到满满当当的桌面了。
库 我们今天需要导入的os、shutil、glob这三个库,os用来对路径的处理,shutil用来对文件的拷贝删除处理,glob用来对指定文件夹下的文件进行遍历。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享import osimport shutilimport glo
参数获取程序 然后我们写了一个参数获取函数,用于处理需要文件进行分类的路径和存放路径等参数的用户输入。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享def getconf():flag = "1"print("输入‘1’为桌面文件夹整理,其它文件夹整理请输入完整路径")path=input("请输入需要整理的文件夹:")if path=="1":goal_path = os.path.join(os.path.expanduser('~'), "Desktop")else:goal_path = pathflag = input("是否需要保留原文件(此项配置仅针对非桌面文件夹有效),保留请输入‘1’,不保留请输入‘2’:")mkdir_path=input("请输入整理后的文件存放路径:")if not os.path.exists(mkdir_path):os.mkdir(mkdir_path)return goal_path,mkdir_path,flag
文件处理程序 因为桌面文件夹和普通文件夹不一样,桌面文件上存在着大量的可执行程序和快捷方式,我们无需将这一部分的文件进行归类处理。所以我这里将桌面文件夹和普通文件夹分开进行了处理。我们先看看普通文件夹的处理方式。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享def FileHandle(goal_path,mkdir_path,flag):file_num = 0path_num = 0for file in glob.glob(f'{goal_path}/**/*', recursive=True):if os.path.isfile(file):filename = os.path.basename(file)if '.' in filename:suffix = filename.split('.')[-1]else:suffix = 'others'if not os.path.exists(f'{mkdir_path}/{suffix}'):os.mkdir(f'{mkdir_path}/{suffix}')path_num += 1shutil.copy(file, f'{mkdir_path}/{suffix}')file_num += 1if flag=="2":shutil.rmtree(goal_path)return file_num,path_num
在对普通文件夹处理之后我们根据输入的flag参数判断是否需要保留原文件,若不需保留的话,我们就删除目标文件夹及其下属的所有文件内容。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享if flag=="2":shutil.rmtree(goal_path)
我们再看看桌面文件的处理方式
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享def DesktopHandle(goal_path,mkdir_path):file_num = 0path_num = 0for file in glob.glob(f'{goal_path}/**/*', recursive=True):if os.path.isfile(file):filename = os.path.basename(file)if '.' in filename:suffix = filename.split('.')[-1]else:suffix = 'others'if suffix=="exe" or suffix=="lnk":passelse:if not os.path.exists(f'{mkdir_path}/{suffix}'):os.mkdir(f'{mkdir_path}/{suffix}')path_num += 1shutil.copy(file, f'{mkdir_path}/{suffix}')file_num += 1return file_num,path_num
大体思路和普通文件夹的处理是一致的,但是在桌面文件的处理中我们将exe和lnk后缀的文件进行了过滤,不对它进行拷贝操作,其它文件我们都拷贝到目标文件夹中。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享if suffix=="exe" or suffix=="lnk":passelse:if not os.path.exists(f'{mkdir_path}/{suffix}'):os.mkdir(f'{mkdir_path}/{suffix}')path_num += 1shutil.copy(file, f'{mkdir_path}/{suffix}')
另外在桌面文件的处理中我现在也没有放上删除原文件的操作,若有需要的小伙伴直接在后面加上文件删除操作即可。
统计信息程序
在所有的文件都处理之后,我还弄了一个统计程序,统计一共处理了多少个文件,创建了多少个分类文件夹。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享def WriteInfo(mkdir_path):file_name = mkdir_path+"\info.txt"with open(file_name,'w',encoding='utf-8') as f:f.write(f'整理完成,有{file_num}个文件分类到了{path_num}个文件夹中')
主程序
最后就是我们的主程序了,分别去调用参数获取程序,文件处理程序和统计程序即可。
# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享if __name__ == '__main__':goal_path,mkdir_path,flag=getconf()if goal_path==os.path.join(os.path.expanduser('~'), "Desktop"):file_num,path_num=DesktopHandle(goal_path, mkdir_path)else:file_num,path_num=FileHandle(goal_path, mkdir_path,flag)WriteInfo(mkdir_path)
实现效果
好了,整个程序都分析过了,最后我们看看最终的实现效果吧。
程序的执行是这样的
桌面文件的归类
普通文件的归类
结束
有需要程序源码的小伙伴关注公众号“菜鸟小白的学习分享”回复“文件分类器源码”即可获取源码下载链接。
有需要程序执行文件的小伙伴关注公众号“菜鸟小白的学习分享”回复“文件分类器可执行文件”即可获取菜鸟小白打包好的可执行程序下载链接。
好了,今天的分享就到这里。如果你也认同菜鸟小白的话,那就给菜鸟小白一个关注、在看、点赞+赞赏吧,你们的支持,是我持续不断的动力。
六十来行python代码完成一个文件分类器的更多相关文章
- 40多行python代码开发一个区块链。
40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...
- 如何用20行Python代码打造一个微信群聊助手?
今天要教大家一个黑科技,20行代码实现自己定制的微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的微信上有一大批好 ...
- 带大家用40行python代码实现一个疫情地图
最近两个月,因为新冠病毒无情的肆虐,相信会给每个中国人的记忆中画上重重的一笔.到今天为止,疫情形势依然十分严峻,虽然除湖北外的其他省份已经连续十一天确诊人数下降,但是接下来还有将近至少1.6亿的人口迁 ...
- opencv安装实录附十几行C++实现的一个人脸识别demo
前言: 之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证. 本来也是看一些资料安装好的,觉得也没 ...
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- 第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作
第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作 注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想 ...
- 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式
孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...
- 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...
- 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念
第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...
随机推荐
- Android学习笔记基于监听的事件处理
事件处理流程 代码格式: Button btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener ...
- Java使用SQLServerBulKCopy实现批量插入SQLSqerver数据库
这是CodingSir的帖子说的(由于不够详细,我现在提供给详细的,上手即用): Microsoft SQL Server 的bcp命令可以快速将大型文件复制插入到数据库中,C#提供了SqlBulkC ...
- 能被 K 整除的最大连续子串长度
[来源]网上流传的2017美团秋招笔试题 [问题描述] 两个测试样例输出都是5 [算法思路] 暴力解法时间会超限,使用一种很巧妙的数学方法.用在读取数组arr时用数组sum记录其前 i 项的和,即 s ...
- 【Mongodb】 可复制集搭建
可复制集 replica set 概念图 可复制集需要至少3个以上的mongodb节点,其中有一个主节点promary,其余的为副本节点secondary 可复制集有三个角色: 主要成员(Primar ...
- 基于领域驱动设计(DDD)超轻量级快速开发架构
smartadmin.core.urf 这个项目是基于asp.net core 3.1(最新)基础上参照领域驱动设计(DDD)的理念,并参考目前最为了流行的abp架构开发的一套轻量级的快速开发web ...
- AOF文件的写入与同步
在 Redis 中客户端向服务器发送相关写命令请求,这时服务器中有个用于处理这些命令的事件循环进程,对这些命令进行处理,并将相关信息处理的结果反馈给客户端,如:"OK",等.同时, ...
- 并发02--JAVA内存模型
在并发编程中,需要解决两个问题:线程间如何通信&线程间如何同步 线程同步:控制不同线程操作顺序的机制 解决这两个问题的方案有两种:共享内存&消息传递 共享内存:通过使用共享内存,隐式通 ...
- git和github入门指南(5)
5.github上的标签 5.1.标签的作用 给当前版本打一个标签,在github上就会形成一个releases版本 点击进去后,用户就可以下载对应版本的源代码 5.2.在本地git工具上创建标签,同 ...
- 【差分】Tallest Cow
题目 FJ's N(1≤N≤10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive ...
- autocomplete 之 ASP.NET
<link href="CSS/jquery.autocomplete.css" rel="stylesheet" type="text/css ...