本人大学时期有一定的代码基础,但毕业这么多年几乎都快忘完了,从事的也是非技术行业。最近因为工作需要重新从零开始学习Python基础小知识,用于辅助日常办公。不足颇多,见笑之处还望包涵,个人博客也只是用于学习记录。
解决需求
将特定格式的文件批量复制到指定文件夹,例如JPG、PSD、MP4等视频图片文件。
本文以PSD为例,因日常工作涉及图片及视频文件的拷盘操作,而本地以单个节目为命名的文件夹内错综复杂。为此需要将本地路径1下面ABC文件夹内PSD文件,拷贝至硬盘路径2下面对应的ABC文件夹内,由于处理得是大批量内容,需要通过Python自动完成文件夹新建和文件复制工作
开发工具
Pycharm
Python3.9
软件的安装和Python的配置就不赘述了。
先贴代码
1.导入shutil,os,send2trash包
这边需要提前导入第三方库
2.在本地找个位置新建文件夹1,在1内新建好你需要拷贝的ABC节目名的文件夹。
3.定义要拷贝的本地节目名所在路径的变量。获取路径下数组dirnames,可以print检验一下
import shutil,os,send2trash
#1获取文件夹名称
path = r'E:\1'
pic_path = r'W:\竞视作图专用PSD模板\【PSD模板通用】'
print(os.listdir(path))
dirnames = [f for f in os.listdir(path) if os.path.isdir(path + '\\' + f)]
print(dirnames)
4.for循环
4.1 循环抓取文件夹1下的节目名,并在目的路径2中新建名字对应的文件夹。
4.2 定义变量为原路径下的节目文件夹路径。如:W:\竞视作图专用PSD模板\【PSD模板通用】\《电子竞技概论精选》
4.3.定义dirnames1为节目文件夹下的所有文件的数组。
4.4 循环嵌套,.定义变量filepath1为原路径下的节目文件夹内文件路径,endswith(‘.psd’)找到我们需要拷贝的文件类型。执行shuti.copy操作
5.检验
shutil.rmtree用于检验拷贝进度,防止出现中途报错导致混乱。即每完成一次拷贝工作,就将文件夹1内的对应名称文件夹删除。当文件夹1内的所有空的节目文件夹删除完毕时,也就意味拷贝已经全部完成。
for filenames in dirnames:
# 取得文件或文件名的绝对路径
target_path = os.path.abspath(r'E:\2'+ '\\' + filenames)
if not os.path.exists(target_path):
#如果目标路径不存在原文件夹的话就创建
os.makedirs(target_path)
# 判断是否为文件夹
filepath = os.path.join(pic_path, filenames)
dirnames1 = os.listdir(filepath)
for filenames1 in dirnames1:
filepath1 = os.path.join(filepath,filenames1)
# 判断是否为文件
if os.path.isfile(filepath1):
# 如果该文件的后缀为用户指定的格式,则把该文件复制到用户指定的目录
if filepath1.endswith('.psd'):
shutil.copy(filepath1,target_path)
shutil.rmtree(r'E:\1' + '\\' + filenames)
运行测试
这里简单拷贝三个文件夹内的PSD文件,当然实际工作中会遇到成百上千的文件夹,可以使用bat脚本文件批量新建。
E:\1下的空文件夹仅供名称索取,拷贝文件则是在pic_path中对应的文件夹。即路径W:\竞视作图专用PSD模板\【PSD模板通用】
仅拷贝PSD文件。
拷贝至文件夹E\2
开始执行代码
E:\2 下已建好一致文件夹,并拷贝好对应的PSD文件。
E:\1下已删除完毕,说明全部内容已拷贝完成。