将图片数据按照标签存储至文件夹

首先,介绍一下要被分类存储的数据集格式

Base文件夹中的图片有两个标签,代表两个指标,图片存储在Base文件夹中,指标一和二的标签都在Annotation_Base.xls中,list.txt存放的是图片的路径和该图片对应的指标一;list1.txt存放的是图片的路径和该图片对应的指标二
将图片数据按照标签存储至文件夹_第1张图片
分好的图片数据集格式长这个样子
将图片数据按照标签存储至文件夹_第2张图片
将图片数据按照标签存储至文件夹_第3张图片

import numpy as np
import os
import shutil
#****************将图片数据按照标签存储至文件夹***************
root='E:/Python/project/DIY/MESSIDOR/Risk of macular edema'  #不同指标需要建立不同的存储文件夹
#创建文件夹
for i in range(4):
    os.mkdir(root+'/'+str(i))
# 读取txt文件并将其转化为array
f = open(r"E:/Python/project/DIY/MESSIDOR/all/list1.txt")   #.txt文件地址 若按照指标一分就list,若按照指标二分就list1
line = f.readline()
data_list = []
while line:
    num = list(map(str, line.split(' ')))
    data_list.append(num)
    line = f.readline()
f.close()
data_array = np.array(data_list)
# print(data_array[:,0])

# 读取每张图片按照其分类复制到相应的文件夹中
imgs = os.listdir('E:/Python/project/DIY/MESSIDOR/all/Base')   #所有图片所在的位置
imgnum = len(imgs)  # 文件夹中图片的数量
j=0
for i in range(imgnum):  # 遍历每张图片
    # print(int(data_array[i][0]))
    label=int(data_array[i][1])    #图片对应的类别
    route=str(data_array[i][0])
    shutil.move(str(route), root+'/'+str(label)+'/'+str(j)+'.tif')  #图片的命名格式为j.tif,若不加也行
    # shutil.move(str(route), root+'/'+str(label)
    j=j+1
#shutil.move()函数,将图片从一个文件夹移动到另一个文件夹。第一个参数是旧的文件路径,第二个参数为新的文件路径。


引用一下这个博主的文章简单的介绍一下shutil.move()函数

#移动文件(目录)
shutil.move("oldpos","newpos") 

https://blog.csdn.net/seanblog/article/details/78885423?ops_request_misc=&request_id=&biz_id=102&utm_term=shutil.move&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-78885423

英文大家应该都不太乐意看,我就百度翻过来,顺便介绍一下我的踩坑历程吧
递归地将文件或目录移动到另一个位置。这是类似于Unix“mv”命令。返回文件或目录的目的地。
如果目标是目录或指向目录的符号链接,则源在目录中移动。目标路径不能已经存在。
如果目标已存在但不是目录,则可能是根据os.rename()语义覆盖。
*如果目标位于当前文件系统上,则使用rename()。否则,src将被复制到目的地,然后被删除。*符号链接是如果os.rename()由于交叉操作而失败,则使用新名称重新创建文件系统重命名。
可选的“copy_function”参数是一个将要使用的可调用参数复制源,否则将委托给“copytree”。默认情况下,使用copy2(),但任何支持可以使用签名(如copy())。
在这里还有很多事情要做。。。看一看mv.c显示很多这个实现掩盖了一些问题。
这个newpos的命名有讲究,说白了就是移动过来的图片不能有重复名字的文件,如果有就删点而且报这样的错
将图片数据按照标签存储至文件夹_第4张图片
如果想分割一下试试看或者需要MESSIDOR数据集的话,传送门在这儿:
https://download.csdn.net/download/weixin_40258368/12400086

你可能感兴趣的:(MESSIDOR,python,windows,pytorch,机器学习,深度学习)