六十来行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.节点 ...
随机推荐
- 从新冠疫情出发,漫谈 Gossip 协议
众所周知周知,疫情仍然在全球各地肆虐.据最新数据统计,截至北京时间 2020-05-28,全球累计确诊 5698703 例,累计死亡 352282 例,累计治愈 2415237 例. 从上面的统计数据 ...
- Ngnix 配置文件快速入门
转自https://www.cnblogs.com/knowledgesea/p/5175711.html 其实也没什么好说的,我想大部分人也不会在意nginx的实现原理啥的.服务器要部署的时候,把n ...
- [经验栈]C#监测IPv4v6网速及流量
1.前言 最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例:也经过自己的一番查询和调试,浪费了不少时间,现在作为经验分享出来希望大家指正. 2.C# ...
- Flutter学习笔记(36)--常用内置动画
如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...
- SpringCloud Alibaba (三):Sentinel 流量控制组件
SpringCloud Alibaba (三):Sentinel 流量控制组件 Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构 ...
- 大文件上传、断点续传、秒传、beego、vue
大文件上传 0.项目源码地址 源码地址 :https://github.com/zhuchangwu/large-file-upload 它是个demo,仅供参考 前端基于 vue-simple-up ...
- Python3-os模块-操作系统的各种接口
Python3中的os模块提供了一个便携的方式去使用操作系统的相关功能 os.name 返回导入的操作系统相关模块的名字,如 posix(unix/linux),nt(windows)等 os.env ...
- mysql8.0 解决时区问题
jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=UTF-8&useOldAlias ...
- 一条SQL删除重复记录,重复的只保留一条
情景: 我们的数据库中可能会存在很多因各种原因而重复的记录,我们需要对这些重复的记录进行删除,每组组重复的记录只保留一条就行 例如我们有这么个表:两个框框都是有重复记录的,红框和绿框都只需要留下一条, ...
- 【Flutter实战】自定义滚动条
老孟导读:[Flutter实战]系列文章地址:http://laomengit.com/guide/introduction/mobile_system.html 默认情况下,Flutter 的滚动组 ...