首先,介紹一下要被分類存儲的數據集格式
Base文件夾中的圖片有兩個標籤,代表兩個指標,圖片存儲在Base文件夾中,指標一和二的標籤都在Annotation_Base.xls中,list.txt存放的是圖片的路徑和該圖片對應的指標一;list1.txt存放的是圖片的路徑和該圖片對應的指標二
分好的圖片數據集格式長這個樣子
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的命名有講究,說白了就是移動過來的圖片不能有重複名字的文件,如果有就刪點而且報這樣的錯
如果想分割一下試試看或者需要MESSIDOR數據集的話,傳送門在這兒:
https://download.csdn.net/download/weixin_40258368/12400086