详解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整理文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在PyTorch中使用标签平滑正则化的问题

    在PyTorch中使用标签平滑正则化的问题

    这篇文章主要介绍了如何在PyTorch中使用标签平滑正则化的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • OFD格式文件及如何适应Python将PDF转换为OFD格式文件

    OFD格式文件及如何适应Python将PDF转换为OFD格式文件

    OFD是中国自主研发的一种固定版式文档格式,主要用于电子公文、档案管理等领域,这篇文章主要介绍了OFD格式文件及如何适应Python将PDF转换为OFD格式文件的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • Pandas DataFrame操作数据增删查改

    Pandas DataFrame操作数据增删查改

    我们在用 pandas 处理数据的时候,经常会遇到用其中一列数据替换另一列数据的场景。这一类的需求估计很多人都遇到,当然还有其它更复杂的。解决这类需求的办法有很多,这里我们来推荐几个,这篇文章主要介绍了Pandas DataFrame操作数据的增删查改
    2022-10-10
  • python用类实现文章敏感词的过滤方法示例

    python用类实现文章敏感词的过滤方法示例

    这篇文章主要介绍了python用类实现文章敏感词的过滤方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python shell根据ip获取主机名代码示例

    python shell根据ip获取主机名代码示例

    这篇文章主要介绍了python shell根据ip获取主机名代码示例,涉及用socket模块和shell中hostname命令获取等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 基于Python实现评论区抽奖功能详解

    基于Python实现评论区抽奖功能详解

    这篇文章主要为大家介绍了基于Python如何实现评论区抽奖的功能,文章的示例代码讲解详细,对我们学习Python有一定帮助,需要的朋友可以学习一下
    2021-12-12
  • python实现的接收邮件功能示例【基于网易POP3服务器】

    python实现的接收邮件功能示例【基于网易POP3服务器】

    这篇文章主要介绍了python实现的接收邮件功能,结合实例形式分析了Python基于网易POP3服务器接收邮件相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • Django REST Framework之频率限制的使用

    Django REST Framework之频率限制的使用

    这篇文章主要介绍了Django REST Framework之频率限制的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 如何在Python中自定义异常类与异常处理机制

    如何在Python中自定义异常类与异常处理机制

    在Python编程中,异常处理是一种重要的编程范式,它允许我们在程序运行时检测并处理错误,本文将介绍如何在Python中编写自定义的异常类,并详细解释Python的异常处理机制,感兴趣的朋友一起看看吧
    2024-06-06
  • 详解win10下pytorch-gpu安装以及CUDA详细安装过程

    详解win10下pytorch-gpu安装以及CUDA详细安装过程

    这篇文章主要介绍了win10下pytorch-gpu安装以及CUDA详细安装过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论