接上节课内容
但在前面判断文件类型的代码中,我们只使用了小写的文件后缀名去进行匹配。
这样的话,比如像“心动.MP3”这个文件就被分类到了“其他文件”。
那么该怎样对大写的后缀名 .MP3 等进行判断呢?
统一字符串 |
为了解决这个问题,我们可以对文件后缀名使用 lower() 函数。 |
sampleStr1 = "NATE".lower() sampleStr2 = "Drake".lower() print(sampleStr1) print(sampleStr2) |
|
对文件后缀名使用lower()函数,修改对文件分类的代码,使“心动.MP3”文件被正确分类。
学习了 lower() 函数后,我们现在把它应用到获取文件后缀名的代码中,将文件后缀名全部转换为小写。 |
# 使用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,我们首先需要确定目标文件夹的路径。 |
|
Second:在代码中,使用 os.path.join() 函数来拼接每个分类文件夹的路径。该函数需要传入两个参数,将两个参数拼接起来组成目标路径。 |
|
|
该函数在合并时,会根据操作系统的不同,在路径之间添加合适的路径分隔符。 |
在遍历所有文件(夹)的代码中,定义一个变量targetPath,用来表示准备移动到的文件夹路径。 |
回到问题,我们已经判断了每个文件所属的类别。接下来,使用变量 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()函数判断目标文件夹是否存在,如果不存在,使用print输出目标路径。
因此,要解决阿文的问题,我们在得到了目标文件夹的路径后,就可以使用 os.path.exists() 函数来判断目标文件夹是否已经存在。 |
# 使用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(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) |
思考一下,这样是否能彻底实现文件自动分类功能