​    你的桌面是否像这样的一样被各种文件给堆满了,但是每一个文件又不清楚是否后面还有作用,也不敢删除,自己一个一个转移又太麻烦了。没关系,今天我带大家用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 = 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代码完成一个文件分类器的更多相关文章

  1. 40多行python代码开发一个区块链。

    40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...

  2. 如何用20行Python代码打造一个微信群聊助手?

    今天要教大家一个黑科技,20行代码实现自己定制的微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的微信上有一大批好 ...

  3. 带大家用40行python代码实现一个疫情地图

    最近两个月,因为新冠病毒无情的肆虐,相信会给每个中国人的记忆中画上重重的一笔.到今天为止,疫情形势依然十分严峻,虽然除湖北外的其他省份已经连续十一天确诊人数下降,但是接下来还有将近至少1.6亿的人口迁 ...

  4. opencv安装实录附十几行C++实现的一个人脸识别demo

    前言: 之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证. 本来也是看一些资料安装好的,觉得也没 ...

  5. 一个 11 行 Python 代码实现的神经网络

    一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...

  6. 第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

    第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作 注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想 ...

  7. 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式

    孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...

  8. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

  9. 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念

    第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...

随机推荐

  1. pip安装mysql-connector

    pip install mysql-connector --index-url https://pypi.douban.com/simple

  2. 0.0---selenium+java自动化基础01---元素定位和操作

    一.定位方法 1.通过ID定位元素:driver. findElement(By.id(value)); 2.通过元素的名称定位元素: driver. findElement(By.name( val ...

  3. cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if

    cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if remove_copy()//在复制过程中删除一些数据remove_copy_if() 删除性算法: ...

  4. 基于SSM框架的新生报到可视化系统

    1.本课题的目的及意义 新生报到数据一直是困扰着各大高校的管理性问题,人数多.工作量大,这无疑是一个挑战,也因此加快了高校的信息化建设步伐.随着互联网的普及与发展,日常生活中人们接触到的数据正以惊人的 ...

  5. Java并发编程-Java内存模型

    JVM内存结构与Java内存模型经常会混淆在一起,本文将对Java内存模型进行详细说明,并解释Java内存模型在线程通信方面起到的作用. 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存 ...

  6. Axis WSDD文件参考文档

    本部分介绍的所有的WSDD元素的名称空间都是"http://xml.apache.org/axis/wsdd/". <deployment> 告诉Axis Engine ...

  7. Refresh Java

    当你的知识来源于实践, 你可能会忽略很多细节. 当你的知识来源于阅读, 你可能会很快的忘掉. 那么, 不如在空闲之余, 浏览一遍, 把觉得有必要的记录下来, 也便于以后温故而知新, 何乐而不为呢? 于 ...

  8. 暑假集训Day0

    啊这 跟学长学的要写日记 希望到时候能写省选集训的总结 咳咳 今天上午做了一上午苦力好像让老苏夸了难以接受(年纪两百考到年级两千他居然没有干我) 上午搞卫生搞到了十点半………… 替女生拉包提东西了!! ...

  9. java后端无法接收到前端传递的json对象

    java后端无法接收到前端传递的json对象 一·可能是因为未使用@RequestBody 在Controller层中,要么使用@RestController要么使用@Controller+@@Req ...

  10. 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

    微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移.玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等 ...