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 = dctself.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 Trueexcept 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:continuedst = 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 = SUCCESSelse: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这个类添加一个静态方法,从而可以快速调用

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

整理结果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13. Threejs案例-绘制3D文字

13. Threejs案例-绘制3D文字 实现效果 知识点 FontLoader 一个用于加载 JSON 格式的字体的类。 返回 font,返回值是表示字体的 Shape 类型的数组。 其内部使用 FileLoader 来加载文件。 构造器 FontLoader( manager : LoadingManager ) 参数类型描述managerLo…

idea运行程序报错 java 程序包org.junit不存在

在 IntelliJ IDEA 中运行程序时遇到错误提示:“java: 程序包org.junit不存在”,针对这一问题,我们可以考虑以下三步来解决: 第一步:检查JUnit依赖 尽管现代项目创建时通常会默认引入JUnit依赖,但仍需检查…

算法学习——LeetCode力扣哈希表篇2

算法学习——LeetCode力扣哈希表篇2 454. 四数相加 II 454. 四数相加 II - 力扣(LeetCode) 描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 …

华清远见嵌入式学习——春节作业——2.6日

作业要求&#xff1a; 作业答案&#xff1a; 作业代码效果图 作业代码截图 作业代码 #include <myhead.h>//通过无名信号量实现线程间的同步 //定义三个无名信号量 sem_t sem1; sem_t sem2; sem_t sem3;//线程A 打印 Happy void *A(void *arg) {int n 5;while(n--){s…

从小白到入门webrtc音视频通话

0. 写在前面 先会骑车&#xff0c;再研究为什么这么骑&#xff0c;才是我认为学习技术的思路&#xff0c;底部付了demo例子&#xff0c;根据例子上面的介绍即可运行。 1. 音视频通话要用到的技术简介 websocket 介绍&#xff1a;1. 服务器可以向浏览器推送信息&#xff1b;2…

第十二章[模块]:12.2:模块的加载

一,导入模块要搜索的路径 1,要搜索的路径有哪些? 当前程序的执行目录。 环境变量 PYTHONPATH(如果设置了的话)指定的目录列表。 安装 Python 时配置的相关目录列表 2,得到具体的模块搜索目录 import sysfor path in sys.path:print(path) 运行结果 (macos平台): /Us…

安装PyInstaller的保姆级教程

一、安装PyInstaller之前首先要安装Python&#xff0c;小编这里安装的是Python3.9&#xff0c;目前&#xff08;2024/2/6&#xff09;匹配到的最高版本的PyInstaller的版本为6.3.0。需要安装Python的小伙伴可以去这里安装python详细步骤&#xff08;超详细&#xff0c;保姆级&a…

【ETOJ P1036】我踏马吃吃吃吃吃 题解(优先队列+贪心算法)

题目描述 有n个人在m个窗口打饭&#xff0c;因为每个人的需求不同&#xff0c;所以每个人的“窗口占用时间”也不同。第i个人的窗口占用时间为 t i t_i ti​。 请问如何安排这些人到窗口打饭&#xff0c;可以使得所有人等待的时间之和最小&#xff1f; 输入格式 第一行两个…

Linux 网络:PTP 简介

文章目录 1. 前言2. PTP(Precision Time Protocol​) IEEE 1588 协议简介2.1 PTP IEEE 1588 协议时间同步原理2.2 PTP IEEE 1588 协议时钟类型2.2.1 普通时钟(OC: Ordinary Clock)2.2.2 边界时钟(BC: Boundary Clock)2.2.3 透明时钟(TC: Transparent Clock)2.2.3.1 端对端透明时…

769933-15-5,Biotin aniline,用来标记和检测细胞膜上的特定蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺 一、基本信息 产品简介&#xff1a;Biotin aniline, also known as Biotin aniline, is a molecular probe with strong reactivity. Its uniqueness…

SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接

目录 一、下载 二、安装配置 1.安装 2.许可条款 3.安装程序支持文件 4.功能选择 5.实例配置 6.服务器配置 7.数据库引擎配置 8.Reporting Services 配置 9.安装进度 ​编辑 10.完成 三、使用 四、新建登录用户 1.新建登录名 2.常规 3.服务器角色 4. 用户映…

Unity3d Shader篇(三)— 片元半兰伯特着色器解析

文章目录 前言一、片元半兰伯特着色器是什么&#xff1f;1. 片元漫反射着色器的工作原理2. 片元半兰伯特着色器的优缺点优点&#xff1a;缺点&#xff1a; 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数…