六十来行python代码完成一个文件分类器
你的桌面是否像这样的一样被各种文件给堆满了,但是每一个文件又不清楚是否后面还有作用,也不敢删除,自己一个一个转移又太麻烦了。没关系,今天我带大家用python一起来做一个文件归类器,一键进行分类,再也不会看到满满当当的桌面了。
库 我们今天需要导入的os、shutil、glob这三个库,os用来对路径的处理,shutil用来对文件的拷贝删除处理,glob用来对指定文件夹下的文件进行遍历。
# -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
import os
import shutil
import 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 = path
flag = 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 = 0
path_num = 0
for 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 += 1
shutil.copy(file, f'{mkdir_path}/{suffix}')
file_num += 1
if 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 = 0
path_num = 0
for 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":
pass
else:
if not os.path.exists(f'{mkdir_path}/{suffix}'):
os.mkdir(f'{mkdir_path}/{suffix}')
path_num += 1
shutil.copy(file, f'{mkdir_path}/{suffix}')
file_num += 1
return file_num,path_num
大体思路和普通文件夹的处理是一致的,但是在桌面文件的处理中我们将exe和lnk后缀的文件进行了过滤,不对它进行拷贝操作,其它文件我们都拷贝到目标文件夹中。
# -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
if suffix=="exe" or suffix=="lnk":
pass
else:
if not os.path.exists(f'{mkdir_path}/{suffix}'):
os.mkdir(f'{mkdir_path}/{suffix}')
path_num += 1
shutil.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学习笔记StateListDrawable文件
SateListDrawable,可包含一个 Drawable 数组,让目标组件在不同状态显示不同 Drawable.对应的 xml 文件的根节点 示例 edittext_focused.xml &l ...
- RocketMQ系列(七)事务消息(数据库|最终一致性)
终于到了今天了,终于要讲RocketMQ最牛X的功能了,那就是事务消息.为什么事务消息被吹的比较热呢?近几年微服务大行其道,整个系统被切成了多个服务,每个服务掌管着一个数据库.那么多个数据库之间的数据 ...
- idea创建项目
选项详解如下: Create New Project:创建一个新的工程.Import Project:导入一个现有的工程.Open:打开一个已有工程.比如:可以打开 Eclipse 项目.Check ...
- MOJITO 发布一周,爬一波弹幕分析下
MOJITO 最近一直啥都没写,追个热点都赶不上热乎的,鄙视自己一下. 周董的新歌 「MOJITO」 发售(6 月 12 日的零点)至今大致过去了一周,翻开 B 站 MV 一看,播放量妥妥破千万,弹幕 ...
- Appium查看应用包名
方式一没有apk 如果应用已经安装在手机上了(例如应用商城下载).可以直接打开手机上该应用, 进入到要操作的界面然后执行: adb shell dumpsys activity recents | f ...
- 多语言工作者の十日冲刺<8/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第八天(05.07) 作业正文 ...
- HTTP协议简要
HTTP协议简要 HTTP协议是指超文本传输协议,简单来说就是一种规则,允许将HTML文档从Web服务器传送到Web浏览器. HTTP请求 HTTP请求包括三部分:请求行(请求方法),请求头(消息报头 ...
- SpringCloud 入门(三)
前文我们介绍了简单的创建一个客户端,并介绍了它是如何提供服务的,接下来介绍它的另外一个组件:zuul. zuul 提供了微服务的网关功能,通过它提供的接口,可以转发不同的服务,可以当作一个中转站. 搭 ...
- 动力节点 mysql 郭鑫 34道经典的面试题三
1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...
- node+ajax实战案例(2)
2.静态资源渲染 2.1.创建http服务器 var http = require('http'); var url = require('url'); var app = http.createSe ...