当前位置: 首页 > news >正文

python文件自动分类(3)

接上节课内容

但在前面判断文件类型的代码中,我们只使用了小写的文件后缀名去进行匹配。
这样的话,比如像“心动.MP3”这个文件就被分类到了“其他文件”。
那么该怎样对大写的后缀名 .MP3 等进行判断呢?

统一字符串

为了解决这个问题,我们可以对文件后缀名使用 lower() 函数。
lower() 函数可以把字符串中所有的字母全部转换成小写。
本示例中,就将两个示例字符串转换成了小写并使用print输出结果。

sampleStr1 = "NATE".lower()

sampleStr2 = "Drake".lower()

print(sampleStr1)

print(sampleStr2)

对文件后缀名使用lower()函数,修改对文件分类的代码,使“心动.MP3”文件被正确分类。

学习了 lower() 函数后,我们现在把它应用到获取文件后缀名的代码中,将文件后缀名全部转换为小写
转换之后,再使用之前的代码进行判断,“心动.MP3”就能被正确分类了。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名并使用lower()函数转换成小写

    extension = os.path.splitext(item)[1].lower()

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        print(f"{item} 图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        print(f"{item} 视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        print(f"{item} 音频文件")

    elif extension in [".pdf"]:

        print(f"{item} PDF文件")

    elif extension in [".docx", ".doc"]:

        print(f"{item} Word文件")

    elif extension in [".xlsx", ".xls"]:

        print(f"{item} Excel文件")

    elif extension in [".pptx", ".ppt"]:

        print(f"{item} PPT文件")

    else:

        print(f"{item} 其他文件")

完成了文件分类后,要想办法把文件移动到对应的文件夹中
在移动文件之前,我们首先需要确认文件的移动路径
例如,要把某个文件移动到音频文件,就需要确定移动到哪里的音频文件夹中。

合并多个路径

First,我们首先需要确定目标文件夹的路径。
阿文的习惯,是将每一个分类文件夹创建在下载文件夹中。
例如,图片文件夹的路径为:
/Users/yequ/Downloads/图片文件
该路径前半部分为下载文件夹的路径,后半部分为分类文件夹的名字。

Second:在代码中,使用 os.path.join() 函数来拼接每个分类文件夹的路径。该函数需要传入两个参数,将两个参数拼接起来组成目标路径。
例如:需要将某个文件夹保存到电脑的桌面上,文件的名称是音频文件。
桌面的路径为: /Users/Desktop
文件夹名字为:"音频文件"
使用 os.path.join() 就能拼接成文件夹的路径。

该函数在合并时,会根据操作系统的不同,在路径之间添加合适的路径分隔符。

在遍历所有文件(夹)的代码中,定义一个变量targetPath,用来表示准备移动到的文件夹路径。
在每一个分类判断代码内,使用os.path.join()函数拼接出目标文件夹路径并赋值给变量targetPath。
最后使用print输出变量targetPath,查看拼接的结果。

回到问题,我们已经判断了每个文件所属的类别。接下来,使用变量 targetPath 来表示目标文件夹路径。
在每一个分类判断代码内,使用 os.path.join() 函数拼接出目标文件夹路径并赋值给变量 targetPath 。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 使用print输出targetPath,查看拼接结果

    print(targetPath)

确定了每个文件需要移动的目标文件夹,那么在移动前还需要确定目标文件夹是否存在
如果目标文件夹不存在,需要先创建文件夹再移动。
例如:心动.mp3 需要移动到音频文件夹中,那么需要先检查 Downloads 文件夹中是否已经创建了音频文件夹。

判断文件是否存在

得到了目标文件夹的路径后,我们可以使用 os.path.exists() 函数来判断该文件夹是否已经存在。
os.path.exists() 函数接受一个路径字符串作为参数,当该路径的文件夹存在时,返回True,不存在时,则返回False。

使用os.path.exists()函数判断目标文件夹是否存在,如果不存在,使用print输出目标路径。

因此,要解决阿文的问题,我们在得到了目标文件夹的路径后,就可以使用 os.path.exists() 函数来判断目标文件夹是否已经存在。
通过 if 判断语句+ not 运算符来判断目标文件夹不存在的情况。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接分类文件夹路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接分类文件夹路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接分类文件夹路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接分类文件夹路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 如果目标文件夹不存在,使用print输出目标路径

    if not os.path.exists(targetPath):

        # 使用print输出目标路径

        print(targetPath)

创建文件夹

前面已经讲了利用 os.path.exists() 函数判断文件夹是否存在。
如果文件夹不存在,我们需要先创建文件夹,再移动文件。
创建文件夹可以使用 os.mkdir() 函数:将要创建的文件夹路径作为参数传入函数中即可。

展示

在之前判断目标文件夹是否存在的代码中,加上os.mkdir(targetPath)以创建文件夹。

在之前判断目标文件夹是否存在的代码中,加上 os.mkdir(targetPath) 即可创建所有不存在的文件夹。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接分类文件夹路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接分类文件夹路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接分类文件夹路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接分类文件夹路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 如果目标文件夹不存在,使用os.mkdir()函数创建文件夹

    if not os.path.exists(targetPath):

        # 使用os.mkdir()函数创建文件夹

        os.mkdir(targetPath)

 思考一下,这样是否能彻底实现文件自动分类功能


http://www.mrgr.cn/news/19979.html

相关文章:

  • flowable 国产数据库并发性能优化
  • 5G农业大数据中心顶层设计
  • 链表.......
  • 我完成第一个AI项目的全过程记录——对IMDB电影评论的情感分析
  • wps匹配加入数据
  • 使用python+opencv解析图像和文本数据
  • 5.6对数变换和非对数变换
  • token和cookie的区别以及接口测试怎么找接口中的token和cookie
  • Java异常关键字
  • 从数据到洞察:DB-GPT驱动的智能化财报分析解决方案
  • 出现 TypeError: Cannot read properties of undefined (reading ‘getUserMedia‘) 解决方法
  • lnmp - tp6.0的安装和简单使用
  • 代码生成器技术乱弹五十五,动词算子再正名
  • AI学习指南深度学习篇-SGD的变种算法
  • 力扣215.返回数组中第K个最大元素
  • Python教程(十九):使用Tkinter制作计算器
  • 基于web的古玩网站设计与实现
  • 欺诈文本分类检测(十):QLora量化微调
  • 负载均衡 Ribbon 与 Fegin 远程调用原理
  • 技术献文:Linux实战(1-正确使用管理面板)