详解Python如何通过文件后缀整理文件夹

 更新时间:2024年02月06日 09:49:36   作者:微小冷  
这篇文章主要为大家详细介绍了Python如何通过文件后缀实现整理文件夹功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

此前用Python实现了根据文件后缀整理文件夹的方法,见此文:Python根据文件后缀整理文件夹。但这篇博客并没有进行良好的封装,下面仍以文件夹整理为目的,用类来重新实现次功能。

文件夹类型字典

根据熵增原理,我们的文件夹在经过一段时间之后会变得混乱不堪,尤其是桌面和下载文件夹,找个东西会十分费劲,特别影响效率,所以用Python做一个文件夹整理小工具还是很有必要的。

而最常见的整理方法,就是按照文件类型,为了实现这个目标,可以先做一个文件类型字典,来绑定文件类型和后缀。

为此,可创建一个类

class FileSystem:
    def __init__(self, root) -> None:
        self.fileDct = FILE_DCT

其中FILE_DCT是默认的文件字典,

# 封装在
FILE_DCT = {
    "图片"  : [".jpg", ".png", ".jpeg", ".gif"],
    "视频"  : [".mp4", ".mkv"],
    "音乐"  : [".mp3", ".wav"],
    "文档"  : [".pdf"],
    "文本"  : [".csv", ".txt"],
    "源码"  : [".py", ".c", ".cpp", ".php"],
    "office": [".docx",".xlsx", ".pptx", ".doc", ".ppt", ".xls"],
    "压缩包": [".zip", ".tgz", ".rar", ".tar", ".7z"],
    "安装包": [".msi", ".exe"],
}

而文件整理的逻辑是,先创建图片、视频等文件夹,然后通过文件的后缀找到其对应的文件类别,然后移动到相应的文件夹。为了更加便捷地实现这个功能,做一个反向的字典,用以通过后缀返回文件夹

# FileSystem的成员方法,复制时注意缩进
def setExDct(self):
    self.exDct = {}
    for key in self.fileDct:
        self.exDct.update({ex:key for ex in self.fileDct[key]})

考虑到更新字典的可能性,创建update方法。

def update(self, dct):
    self.fileDct = dct
    self.setExDct()

移动文件

接下来就是移动文件,这里面有两个问题,一是目标文件夹不存在,则需要新建;二则是目标文件夹中已经有了同名文件,那么则需要报错

import os
import shutil
pJoin = os.path.join
pExist = os.path.exists

    # 此为FileSystem的成员方法
    def mvFile(self, src, dst):
        if not pExist(dst):
            os.makedirs(dst)
        try:
            shutil.move(src, dst)
            return True
        except Exception as e:
            print(e)
            return False

主流程

接下来就是整个文件夹整理的主流程

from pathlib import Path

# FileSystem的成员方法,复制时注意缩进
# tar是准备整理的文件夹
def sortFiles(self, tar):
    files = os.listdir(tar)
    fsErr = []
    self.history = []
    for f in files:
        src = pJoin(tar, f)
        print(src)
        ex = Path(src).suffix.lower()
        if ex not in self.exDct:
            continue
        dst = pJoin(tar, self.exDct[ex])
        if self.mvFile(src, dst):
            self.history.append([src, dst])
        else:
            fsErr.append(src)
    self.setErrInfo(fsErr)

# 设置错误信息
def setErrInfo(self, fsErr):
    SUCCESS = "全部文件移动成功"
    ERROR = "以下文件移动失败:\r\n"
    if len(fsErr) == 0:
        self.errInfo = SUCCESS
    else:
        self.errInfo = ERROR + "\r\n".join(fsErr)

其中,self.history用于存储复制结果,如果感觉整理逻辑不对,想要恢复整理之前的样子,则可动用history中的列表。

# FileSystem的成员方法,复制时注意缩进
def restore(self):
    fsErr = []
    for src, dst in self.history:
        if not self.mvFile(dst, src):
            fsErr.append(dst)
    self.setErrInfo(fsErr)

最后,为FileSystem这个类添加一个静态方法,从而可以快速调用

    @staticmethod
    def sort(tar, fileDct=None):
        fs = FileSystem()
        if fileDct:
            fs.update(fileDct)
        fs.sortFiles(tar)

整理结果如下

到此这篇关于详解Python如何通过文件后缀整理文件夹的文章就介绍到这了,更多相关Python整理文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python之lambda匿名函数及map和filter的用法

    Python之lambda匿名函数及map和filter的用法

    今天小编就为大家分享一篇关于Python之lambda匿名函数及map和filter的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python hashlib模块用法实例分析

    Python hashlib模块用法实例分析

    这篇文章主要介绍了Python hashlib模块用法,结合实例形式分析了Python使用hash模块进行md5、sha1、sha224、sha256、sha512等加密运算相关操作技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • Python实现的井字棋(Tic Tac Toe)游戏示例

    Python实现的井字棋(Tic Tac Toe)游戏示例

    这篇文章主要介绍了Python实现的井字棋(Tic Tac Toe)游戏,结合实例形式分析了井字棋的原理及Python相关实现技巧,需要的朋友可以参考下
    2018-01-01
  • Python实现动态二维码生成的示例代码

    Python实现动态二维码生成的示例代码

    这篇文章主要和大家分享两个制作二维码的Python库,可以生成普通的二维码、图片背景版二维码、动图GIF版二维。文中的示例代码讲解详细,感兴趣的可以学习一下
    2022-05-05
  • python常用模块(math itertools functools sys shutil)使用讲解

    python常用模块(math itertools functools sys 

    这篇文章主要介绍了python常用模块之math itertools functools sys shutil的使用示例讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python tkinter实现日期选择器

    Python tkinter实现日期选择器

    这篇文章主要为大家详细介绍了Python tkinter实现日期选择器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • Python 中判断列表是否为空的方法

    Python 中判断列表是否为空的方法

    这篇文章主要介绍了Python 中判断列表是否为空的方法,本文通过代码详解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python实现的单向循环链表功能示例

    Python实现的单向循环链表功能示例

    这篇文章主要介绍了Python实现的单向循环链表功能,简单描述了单向循环链表的概念、原理并结合实例形式分析了Python定义与使用单向循环链表的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • python爬取豆瓣电影排行榜(requests)的示例代码

    python爬取豆瓣电影排行榜(requests)的示例代码

    这篇文章主要介绍了python爬取豆瓣电影排行榜(requests),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python实现将JPG、BMP图片转化为bgr

    python实现将JPG、BMP图片转化为bgr

    这篇文章主要介绍了python实现将JPG、BMP图片转化为bgr方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论