赞
踩
如果文件夹不存在,我们需要先创建文件夹,再移动文件。
创建文件夹可以使用 os.mkdir() 函数:将要创建的文件夹路径作为参数传入函数中即可。
在之前判断目标文件夹是否存在的代码中,加上 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)
但是若是原有文件中有个文件名跟需要拖移到的目标文件夹重名,该方式是无法甄别出来的,这个时候需要判断该文件是否为文件夹
我们将要进行判断的文件路径传入到 os.path.isdir() 函数中,如果该路径是文件夹就会返回True,如果不是就返回False。
import os
print(os.path.isdir("/Users/yequ/Downloads/PDF文件"))
print(os.path.isdir("/Users/yequ/Downloads/OKR小组讨论1.mp3"))
结果
True
False
接下来我们可以使用 if 语句进行判断,当结果是 True 时,也就是该路径是一个文件夹时,使用print输出itemPath。
要想移动文件,我们需要导入Python中另一个内置的模块 shutil ,然后使用 shutil.move() 函数来对文件进行移动。
shutil.move() 函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。
# 导入shutil模块
import shutil
# 准备移动的文件路径
srcPath = "/Users/yequ/Downloads/心动.MP3"
# 目标文件夹路径
targetPath = "/Users/yequ/Downloads/音频文件"
# 使用shutil.move()函数移动文件
shutil.move(srcPath, targetPath)
阿文的需求,是把分好类的文件移动到对应的文件夹里。
所以我们只需在程序判断 itemPath 不是一个文件夹的时候,使用 shutil.move() 函数将itemPath路径的文件移动到targetPath路径的文件夹下。
# 判断当itemPath路径不是文件夹时,移动文件到分类文件夹去
if not os.path.isdir(itemPath):
# 使用shutil.move()函数移动文件到targetPath路径
shutil.move(itemPath, targetPath)
首先,获取文件夹中所有文件名称,用 os.path.join() 函数拼接出要移动到的目标地址。
然后,使用 os.path.exists() 函数判断目标文件夹是否存在,不存在用 os.mkdir() 创建文件夹。
再者,使用 os.path.isdir() 函数判断是否为文件夹。
最后,当不是文件夹时,使用 shutil.move() 函数移动。
夜曲中学乔老师收到了学生们的答题卡文件夹,把这个文件夹放在电脑桌面上,打开一看,所有班级的学生都在一个文件夹里。
例如:
七年级一班-贾量.docx
七年级二班-曹梦婷.docx
七年级六班-潘婷.docx
乔老师想要把答题卡按照班级归类,在exam文件夹中创建班级文件夹,例如:七年级一班,再把答题卡移动到对应的班级中。
今天我们就不要手动分类,运用文件自动化操作,帮助乔老师把所有的答题卡,放到对应的文件夹里吧~
文件夹路径:/Users/yequ/Desktop/exam
思路
首先是确认班级文件在不在,这个需要先把文件夹路径下的所有文件名导出,并分割字符串取前面那部分,然后判断这些班级文件夹是否存在,不存在则创建好。
下面是将原有文件移动到班级文件夹中。
# TODO 使用import导入os模块 import os # TODO 使用import导入shutil模块 import shutil # TODO 将文件夹路径/Users/yequ/Desktop/exam 赋值给变量path path="/Users/yequ/Desktop/exam" # TODO 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems allItems=os.listdir(path) # TODO 使用for循环遍历所有文件(夹) for item in allItems: # TODO 使用split()分割文件名,获取第一个元素,赋值给classInfo(获取班级信息) classInfo=item.split("-")[0] # TODO 使用os.path.join()函数拼接分类文件夹路径,赋值给classPath classPath=os.path.join(path,classInfo) # TODO 使用os.path.exists()函数判断当如果目标文件夹不存在 if not os.path.exists(classPath): # TODO 使用os.mkdir()函数创建文件夹 os.mkdir(classPath) # TODO 使用os.path.join()函数拼接文件路径,并赋值给变量sourcePath SourcePath=os.path.join(path,item) # TODO 使用os.path.isdir()函数判断当目标文件不是文件夹 if not os.path.isdir(SourcePath): # TODO 移动文件到分类文件夹去 shutil.move(SourcePath,classPath)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。