-
案例描述
在机器学习案例中要创建一个mnist的数据集。这个数据集中要有训练集和测试集。我需要把文件夹下几个文件中的图片,分别抽出三分之一的文件放到测试集文件夹中,剩余三分之二的文件放到训练集文件夹下。小小的难点是,文件夹中分了类别,这些类别不能改变。此外,待移入的文件夹中没有创建已经分类的文件夹。
-
解决代码
import os
from PIL import Image
## python里面+和,的区别是什么来? ----+不带空格,自带空格。
resultDir = '.\\result'
for dirname in os.listdir(resultDir): ## 获取当前路径下的所有文件夹及文件名。 dirname是0、1、2.。。。文件夹的名字。
FileList = [] ## 存放图片路径的列表。
## 提取出前三分之一的图片。
for dirname_picture in os.listdir(os.path.join(resultDir, dirname)): ## 获取0、1、2.。。文件夹下的文件名。
FileList.append(os.path.join(resultDir, dirname, dirname_picture))
## 将前三分之一的图片移动到test-images文件夹下的对应文件夹下。
for dirpath_picture in FileList[:len(FileList)//3]: ## dirpath_picture是图片的相对路径.\\result\\0\\picture.png。注意要用'//'进行整出。float不支持。
img = Image.open(dirpath_picture)
## 判断文件夹是否已经创建。
path = os.path.join('.\\test-images', dirpath_picture.split('\\')[2])
isExists = os.path.exists(path)
## 若0、1、2.。。文件夹不存在,则先创建文件夹。
if not isExists:
os.makedirs(path)
print('创建成功')
## 更改文件的存储路径。
img.save(os.path.join(path, dirpath_picture.split('\\')[3]))
## 将后三分之一的图片移动到training-images文件夹下的对应文件夹下。
for dirpath_picture in FileList[len(FileList)//3:]: ## dirpath_picture是图片的相对路径.\\result\\0\\picture.png。
img = Image.open(dirpath_picture)
## 判断文件夹是否已经创建。
path = os.path.join('.\\training-images', dirpath_picture.split('\\')[2])
isExists = os.path.exists(path)
## 若0、1、2.。。文件夹不存在,则先创建文件夹。
if not isExists:
os.makedirs(path)
print('创建成功')
## 更改文件的存储路径。
img.save(os.path.join(path, dirpath_picture.split('\\')[3]))