前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >六十来行python代码完成一个文件分类器

六十来行python代码完成一个文件分类器

作者头像
菜鸟小白的学习分享
发布2020-07-14 17:52:29
1.3K0
发布2020-07-14 17:52:29
举报
文章被收录于专栏:菜鸟小白的学习分享

你的桌面是否像这样的一样被各种文件给堆满了,但是每一个文件又不清楚是否后面还有作用,也不敢删除,自己一个一个转移又太麻烦了。没关系,今天我带大家用python一起来做一个文件归类器,一键进行分类,再也不会看到满满当当的桌面了。

我们今天需要导入的os、shutil、glob这三个库,os用来对路径的处理,shutil用来对文件的拷贝删除处理,glob用来对指定文件夹下的文件进行遍历。

代码语言:javascript
复制
# -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
import os
import shutil
import glo

参数获取程序

然后我们写了一个参数获取函数,用于处理需要文件进行分类的路径和存放路径等参数的用户输入。

代码语言:javascript
复制
# -*- 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

文件处理程序

因为桌面文件夹和普通文件夹不一样,桌面文件上存在着大量的可执行程序和快捷方式,我们无需将这一部分的文件进行归类处理。所以我这里将桌面文件夹和普通文件夹分开进行了处理。我们先看看普通文件夹的处理方式。

代码语言:javascript
复制
# -*- 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参数判断是否需要保留原文件,若不需保留的话,我们就删除目标文件夹及其下属的所有文件内容。

代码语言:javascript
复制
# -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
    if flag=="2":
        shutil.rmtree(goal_path)

我们再看看桌面文件的处理方式

代码语言:javascript
复制
# -*- 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后缀的文件进行了过滤,不对它进行拷贝操作,其它文件我们都拷贝到目标文件夹中。

代码语言:javascript
复制
 # -*- 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}')

另外在桌面文件的处理中我现在也没有放上删除原文件的操作,若有需要的小伙伴直接在后面加上文件删除操作即可。

统计信息程序

在所有的文件都处理之后,我还弄了一个统计程序,统计一共处理了多少个文件,创建了多少个分类文件夹。

代码语言:javascript
复制
# -*- 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}个文件夹中')

主程序

最后就是我们的主程序了,分别去调用参数获取程序,文件处理程序和统计程序即可。

代码语言:javascript
复制
# -*- 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)

实现效果

好了,整个程序都分析过了,最后我们看看最终的实现效果吧。

程序的执行是这样的

桌面文件的归类

普通文件的归类

结束

有需要程序源码的小伙伴关注公众号“菜鸟小白的学习分享”回复“文件分类器源码”即可获取源码下载链接。

有需要程序执行文件的小伙伴关注公众号“菜鸟小白的学习分享”回复“文件分类器可执行文件”即可获取菜鸟小白打包好的可执行程序下载链接。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟小白的学习分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档