接下来,我们要按照文件后缀名对文件进行分类。
文件后缀名 |
要判断文件类型,我们需要先学习文件后缀名这个概念。 |
Ps
在Windows和macOS系统中,几乎所有的文件都有后缀名。
但对于常见的后缀名,最新的操作系统默认都不显示,我们需要通过更改设置来让电脑显示所有文件的后缀名。
图中展示了一些常见的文件类型后缀名,这些后缀名不需要记背,需要的时候查阅即可。需要注意的是: |
怎么将文件移动到对应分类呢?
对文件进行分隔,取出后缀名,根据后缀名将文件移动到对应文件夹中。
例如:将第一个文件 读书会回忆.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运算符配合if语句,判断sampleExt变量是否是音频文件后缀名。如果是的话,使用print输出“该文件是音频文件”。 |
因此,使用 in 运算符配合 if 语句,就能够以更简练的代码来判断是否是音频文件后缀名。 |
进一步完善代码
根据常见后缀名列表,使用后缀名判断文件是什么类型,并使用print输出文件名和文件类型名称,不在列表中的类型输出为“其他文件”。 |
在前面的步骤中,我们已经获得了每个文件的后缀名。 |
# 使用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 等进行判断呢?