嗯呢,你没看错,就是教你把一个路径下的所有目标图片搬运到制定路径下。有读者说:小詹你忽悠人吧,要搬运目标图片复制粘贴不就好了嘛,要什么代码,搬砖脑子秀逗了?
咳咳,对于目标文件夹复制粘贴当然可以,还简单易操作。但是如果你要的目标图片在某一路径下不同深度的子文件夹中呢?如果该文件夹中各种格式的文件扎堆在一起呢?比如下面这样:
如果你要搬运的图片是上边那样存放的呢?如果层数更多更复杂呢?如果图片数量庞大呢?如果其他格式的文件干扰呢?(不要觉得这现象少见,在处理数据集的时候多少都会遇到的~)复制粘贴效率就不行了吧!别忘了咱们是谁,是改变世界的程序猿啊!这不,哪怕再复杂,下边用10来行代码轻松搞定~
说的很有趣很高深似的,其实就是用了Python的两个模块os和shutil罢了,用到其中两个方法,一一道来。
1.首先是文件复制方法
shutil.copy(src,dst)
复制一个文件到另一个文件或目录,对于本例而言就是单次操作的图片。
2.还有遍历目录操作
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
-
top — 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
- topdown –可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- onerror — 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
- followlinks — 可选,如果为 True,则会遍历目录下的快捷方式,如果为 False,则优先遍历 top 的子目录。
弄明白这两个关键方法,要实现目标图片的搬运就只需要10行代码了~
import os,shutil print('输入格式:E:\myprojectnew\jupyter\整理文件夹\示例') path = input('请键入需要整理的文件夹地址:') new_path = input('请键入要复制到的文件夹地址:') for root, dirs, files in os.walk(path): for i in range(len(files)): if (files[i][-3:] == 'jpg') or (files[i][-3:] == 'png') or (files[i][-3:] == 'JPG'): file_path = root+'/'+files[i] new_file_path = new_path+ '/'+ files[i] shutil.copy(file_path,new_file_path)
运行后只需要指定你想要复制的图片所在路径为path,欲复制到的路径为new_path,就可以等着自动将图片复制到指定路径下了,当然目标不限于图片噢。
3.相关补充
os模块和shutil模块常用的方法还有以下几种~