函数不懂的参考:imagenet数据格式以及python文件处理的一些函数
import glob
import os
from shutil import move
from os import rmdir
target_folder = './imagenet/tiny-imagenet-200/val/'
val_dict = {}
#打开验证集的注释文件,这个文件的每一行数据是
# val_0.JPEG n03444034 0 32 44 62
# 对于每一行数据来说,第一个是图片名,第二个是用这个名称作为这个图片的文件夹名,
# 以前两个名字作为键值对做成一个字典,val_0.JPEG:n03444034,n03444034是这张图片所属的类别
with open('./imagenet/tiny-imagenet-200/val/val_annotations.txt', 'r') as f:
for line in f.readlines():
split_line = line.split('\t')
val_dict[split_line[0]] = split_line[1]
print(val_dict)
# print(val_dict.keys())
paths = glob.glob(r'D:/jiaoyidi/swin_transformer/imagenet/tiny-imagenet-200/val/images/*')
# 这个paths是将验证集中的所有图片的地址做成一个列表放在paths中
# print(paths)
# ['D:/jiaoyidi/swin_transformer/imagenet/tiny-imagenet-200/val/n01443537/images\\val_9506.JPEG',
# 'D:/jiaoyidi/swin_transformer/imagenet/tiny-imagenet-200/val/n01443537/images\\val_9560.JPEG',
# 'D:/jiaoyidi/swin_transformer/imagenet/tiny-imagenet-200/val/n01443537/images\\val_9949.JPEG']
for path in paths:
file = path.split('\\')[-1]
print(file)#val_9506.JPEG
folder = val_dict[file]
print(folder)#n01443537
# target_folder = './imagenet/tiny-imagenet-200/val/'
if not os.path.exists(target_folder + str(folder)):
os.mkdir(target_folder + str(folder))
os.mkdir(target_folder + str(folder) + '/images')
for path in paths:
file = path.split('\\')[-1]
folder = val_dict[file]
dest = target_folder + str(folder) + '/images/' + str(file)
move(path, dest)
# 删除images这个目录,实际上经过上面的移动过程,images这个文件夹中已经没有图片了,都被上一行的move移动完了
rmdir('./imagenet/tiny-imagenet-200/val/images')