python实现从一个文件夹下随机抽取一定数量的图片并移动到另一个文件夹

由于制作训练集和验证集、测试集的需要,我需要从原始数据集中,随机取出(剪切)一定数量的图片。手动挑选毕竟不能保证随机性,且费时费力。故参考了这位博主的方法。

 1 ##深度学习过程中,需要制作训练集和验证集、测试集。
 2 
 3 import os, random, shutil
 4 def moveFile(fileDir):
 5         pathDir = os.listdir(fileDir)    #取图片的原始路径
 6         filenumber=len(pathDir)
 7         rate=0.1    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
 8         picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片
 9         sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片
10         print (sample)
11         for name in sample:
12                 shutil.move(fileDir+name, tarDir+name)
13         return
14 
15 if __name__ == '__main__':
16     fileDir = "./source/"    #源图片文件夹路径
17     tarDir = './result/'    #移动到新的文件夹路径
18     moveFile(fileDir)   

如果是要复制文件可参考以下完整代码

 1 import os, random, shutil
 2 def copyFile(fileDir):
 3         pathDir = os.listdir(fileDir)    #取图片的原始路径
 4         filenumber=len(pathDir)
 5         rate=0.01    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
 6         picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片
 7         sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片
 8         print (sample)
 9         for name in sample:
10                 shutil.copy(fileDir+name, tarDir+name)
11         return
12 
13 if __name__ == '__main__':
14     fileDir = "./source/"    #源图片文件夹路径
15     tarDir = './result/'    #移动到新的文件夹路径
16     copyFile(fileDir)