python文件自动化(4)

接上节课内容,在开始正式移动文件到目标文件夹之前,我们需要再思考一个问题。
在代码运行之前,阿文的下载文件夹里已经存在一些分类文件夹了,比如图例中"PDF文件"这个文件夹就是已经存在的。
这样的话,在程序运行时,按目前的逻辑,计算机就会把这个文件夹分类为其他文件,因为这个文件夹没有后缀名。

因此,每运行一遍代码,之前已经创建的文件夹都会被移动到"其他文件"这个文件夹下。
为了避免将文件夹移动到其他文件中,我们需要先判断该文件是否是文件夹,不是文件夹再移动。

修改代码

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 使用os.path.join()函数拼接文件路径,并赋值给变量itemPath。 |
| 我们先使用 os.path.join() 函数拼接出文件目前所在路径,也就是使用下载文件夹的路径和文件名进行合并。图例中我们先将合并后的文件路径赋值给变量 itemPath ,然后使用print输出itemPath。 |
| # 使用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(targetPath) # 使用os.path.join函数拼接文件路径,并赋值给变量itemPath itemPath = os.path.join(downloadPath, item) # 使用print()输出文件路径 print(itemPath) |
| |

判断路径是否是文件夹

|----------------------------------------------------------------------------|
| |
| 我们将要进行判断的文件路径传入到 os.path.isdir() 函数中,如果该路径是文件夹就会返回True,如果不是就返回False。 |
| |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 判断当itemPath路径是一个文件夹时,输出变量itemPath。 |
| 将文件路径传入 os.path.isdir() 函数中,由于该函数返回的是布尔数。 我们可以使用 if 语句进行判断,当结果是 True 时,也就是该路径是一个文件夹时,使用print输出itemPath。 |
| # 使用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(targetPath) # 使用os.path.join函数拼接文件路径,并赋值给变量itemPath itemPath = os.path.join(downloadPath, item) # 使用if判断itemPath路径是一个文件夹时 if os.path.isdir(itemPath): # 使用print()输出itemPath print(itemPath) |
| |

移动文件夹

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 要想移动文件,我们需要导入Python中另一个内置的模块 shutil ,然后使用 shutil.move() 函数来对文件进行移动。 shutil.move() 函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。 |
| |
| 代码修改 |
| 导入shutil模块。 判断当itemPath不是文件夹时,使用shutil.move()函数移动itemPath路径的文件到targetPath路径的文件夹。 |
| 阿文的需求,是把分好类的文件移动到对应的文件夹里。 所以我们只需在程序判断 itemPath 不是一个文件夹的时候,使用 shutil.move() 函数将itemPath路径的文件移动到targetPath路径的文件夹下。 |
| # 使用import导入os模块 import os # 使用import导入shutil模块 import shutil # 将阿文的下载文件夹路径 /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(targetPath) # 使用os.path.join()函数拼接文件路径,并赋值给变量itemPath itemPath = os.path.join(downloadPath, item) # 判断当itemPath路径不是文件夹时,移动文件到分类文件夹去 if not os.path.isdir(itemPath): # 使用shutil.move()函数移动文件到targetPath路径 shutil.move(itemPath, targetPath) |
| shutil.move()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。 |

至此,我们帮助阿文编写的,对文件自动分类并移动的代码就全部完成啦。可以发现,几乎是一瞬间,几十个文件就全部分类并移动到指定的文件夹了。

相关推荐
梓豪csd5 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
王中阳Go5 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳5 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_6 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
不脱发的程序猿7 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
supabc1237 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi7 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
程序员塔塔喵8 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
ZhengEnCi8 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
北京青蓝智慧马老师8 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能