Python文件自动分类(2)

接下来,我们要按照文件后缀名对文件进行分类。

文件后缀名

要判断文件类型,我们需要先学习文件后缀名这个概念。
文件后缀名又叫文件扩展名(File extension),可以用来判断某一个文件属于什么类型。
在文件名中,点号,也就是英文句号(.)和其后面的部分即是文件后缀名。

Ps

在Windows和macOS系统中,几乎所有的文件都有后缀名。
但对于常见的后缀名,最新的操作系统默认都不显示,我们需要通过更改设置来让电脑显示所有文件的后缀名。

图中展示了一些常见的文件类型后缀名,这些后缀名不需要记背,需要的时候查阅即可。需要注意的是:
1. 操作系统通过文件后缀名判断文件类型时,不区分后缀名的大小写。即.jpg和.JPG都表示图片文件
2. 文件后缀名只是告诉操作系统应该用什么程序来打开文件,修改文件名并不能改变文件类型

怎么将文件移动到对应分类呢?
对文件进行分隔,取出后缀名,根据后缀名将文件移动到对应文件夹中。
例如:将第一个文件 读书会回忆.avi 进行分隔,获得 读书会回忆 和 .avi 两个部分;
.avi 是视频文件,就将 读书会回忆.avi 移到视频文件夹中。

分隔文件后缀名(代码示例及解释)

import os

fileName = "主持人_试音.mp3"

target = os.path.splitext(fileName)

print(target)

1. 使用 os.path.splitext() 函数就能对文件进行分隔操作。

2. os.path.splitext() 函数中要传入待分隔文件,例如:"主持人_试音.mp3"

3. 使用 os.path.splitext() 函数对文件进行分隔后,返回的是一个元组

例如:对文件"主持人_试音.mp3"进行分隔后,输出的是 ('主持人_试音', '.mp3')。

元组的第一项是文件名称,元组的第二项是文件后缀名。

4.

逐步完善代码

在循环遍历所有文件(夹)的代码中,使用print输出分割后的文件名

接下来,使用 os 模块的 os.path.splitext() 函数分隔每个文件。

返回的元组数据中,元组的第一个元素是文件名最后一个点号前面的部分,第二个元素是文件名最后一个点号和其后面的部分,即文件后缀名。

# 使用import导入os模块

import os

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

downloadPath = "/Users/yequ/Downloads"

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

allItems = os.listdir(downloadPath)

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

for item in allItems:

    # 使用 os.path.splitext 对文件名进行分隔,赋值给target

    target = os.path.splitext(item)

    # 使用print输出分割后的文件名

    print(target)

修改代码:在循环遍历所有文件(夹)的代码中,使用print输出分割后的文件名

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

for item in allItems:

    # 使用 os.path.splitext 对文件名进行分隔,取第2个元素,赋值给extension

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

    # 使用print输出分割后的文件名

    print(extension)

返回的元组数据中,元组的第一个元素是文件名最后一个点号前面的部分,第二个元素是文件名最后一个点号和其后面的部分,即文件后缀名。

我们直接获取第二个元素(文件后缀名)并输出。

判断文件类型

得到每个文件的后缀名后,我们就可以使用if语句来判断该后缀名属于哪种类型的文件。

比如,判断一个文件后缀名是否是Excel文档后缀就可以使用示例中的代码。

在某些情况下,要判断的条件会较多,比如音频文件,需要判断的后缀名就有.wav .mp3 .mid .ape .flac这5种。

这种情况下,如果使用if语句 + or运算符的方式,写出来的判断语句就会很长。

为了简化逻辑和代码,我们可以使用 in运算符
in运算符的右边,是一个列表或元组,左边是要判断的元素。
如果要判断的元素在列表(元组)中,运算结果为True,如果要判断的元素不在列表(元组)中,运算结果为False

由此简化代码

使用in运算符配合if语句,判断sampleExt变量是否是音频文件后缀名。如果是的话,使用print输出“该文件是音频文件”。

因此,使用 in 运算符配合 if 语句,就能够以更简练的代码来判断是否是音频文件后缀名。
音频文件后缀名有:[".wav", ".mp3", ".mid", ".ape", ".flac"]

进一步完善代码

根据常见后缀名列表,使用后缀名判断文件是什么类型,并使用print输出文件名和文件类型名称,不在列表中的类型输出为“其他文件”。
注意:文件名和文件类型名称中间有一个空格。

在前面的步骤中,我们已经获得了每个文件的后缀名。
现在,我们再利用刚才学习的in运算符,加上if-elif-else语句,就可以对这些文件进行分类了。
本示例中,在对文件进行分类后,使用了格式化字符串同时输出了文件名和文件类型。
注意:文件名和文件类型名称中间有一个空格。

# 使用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

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

    # 根据后缀判断文件类型

    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} 其他文件")

之前的课程讲到,通过文件后缀名判断文件类型是不区分大小写的,.mp3和.MP3都表示音频文件。
但在前面判断文件类型的代码中,我们只使用了小写的文件后缀名去进行匹配。
这样的话,比如像“心动.MP3”这个文件就被分类到了“其他文件”。
那么该怎样对大写的后缀名 .MP3 等进行判断呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值