首页 > 编程语言 > 详细

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

时间:2020-07-12 15:34:51      阅读:71      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/cainiaoxiaobaidexuexifenxiang/p/13288289.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!