详解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类中使用cursor.execute()时语法错误的解决方法
在 Python 类中使用 cursor.execute() 时,出现语法错误(如 SyntaxError 或 SQL 语法相关错误)通常是因为 SQL 语句格式不正确、占位符使用不当,或参数传递方式不符合预期,以下是解决此类问题的常见方法和建议,需要的朋友可以参考下2024-09-09Python datacompy 找出两个DataFrames不同的地方
本文主要介绍了Python datacompy 找出两个DataFrames不同的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>2022-05-05
最新评论