前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
最近遇到一个小伙伴问我,怎么将几百上千个文件夹里的文件,批量取出来,
另外汇总放到指定的文件夹中,还要从1开始给它们按照顺序进行编号。
这上千个文件夹,每个文件夹里还有好几个图片,好家伙,我怎么有点耳熟,写真集不就是这样的吗?
不过这都难不倒我,既然有Python在,这都是小事一桩,分分钟就能搞定,只不过到时候还得要他发我邮箱!
话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码
正文
说的上千,结果总共才有360个文件夹。
每个文件夹下面有数量不等的照片:
解决代码如下:
import os
import shutil
path1 = r"F:\cyclegan\新建文件夹\Dataset_Part1"
pic=os.listdir(path1)
k=0
for i in range(1,len(pic)):
path="F:/cyclegan/新建文件夹/Dataset_Part1"+"/"+str(i)
pic2 = os.listdir(path)
for j in range(1, len(pic2)):
k=k+1
shutil.copy(path+"/"+str(j)+".jpg", "F:/cyclegan/新建文件夹/zong" + "/" + str(k) + ".jpg")
使用两个for循环即可解决问题:
-
os.listdir(path)方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
这里输入print(len(pics))就可以返回这个文件夹中文件的数量。
-
shutil.copy(path1,path2)把path1的文件复制到path2
-
写path路径的时候,如何其中存在循环的变量i作为名称的话(比如1.jpg,2.jpg…),
i前面一定要有str,不然会报错(也就是将int型转为str型)
当然还遇到了另外一个问题,就是某个文件夹里的照片多了,我需要删除一些。
比如2000+张挑选344张,复制到另外一个文件夹。
代码解决如下:
import os
import shutil
import random
path1 = r"F:\cyclegan\新建文件夹\zong2"
pic=os.listdir(path1)
j=0
for i in range(1,345):
number = random.randint(1,len(pic))
j=j+1
shutil.copy(path1 + "/" + str(number) + ".jpg", "F:/cyclegan/新建文件夹/testA" + "/" + str(j) + ".jpg")
这里使用随机数进行动态选择 random。random.randint用来生成整数
shutil.copy依然是复制
尾语 💝
好了,今天的分享就差不多到这里了!
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!