第一步: 使用.read().strip().split('\n') 将标签进行拆分
第二步:对路径进行拆分,分成文件夹名字和路径名
第三步:构造字典,将文件夹名做为key,图片的路径作为value,如果图片路径存在就进行添加
第四步:使用class构造出data_dir,list_file, 及每一个文件夹对应一个类别
第五步:循环train_set, 读取其中的属性list_file,构造出image_list 和 label_list
import os def dataset_from_list(data_dir, list_file): # 第一步:使用.read() 读取文件,使用strip()去除两边的空格, split('\n')根据换行符进行切分 lines = open(list_file, 'r').read().strip().split('\n') from os import path d = path.dirname(__file__) # 获得当前文件夹的名字 path = os.path.join(d, data_dir) # 构造出图片的路径 lines_dict = {} for line in lines: # 循环每一张图片 image_path = line.split(' ')[0] # 获得图片的路径 key, picture_name = image_path.split('\\') # 进行路径的拆分,获得标签的key picture_name = os.path.join(path, image_path) # 将图片路径与image_path结合获得单张图片的路径 if key not in lines_dict: # 如果字典的键不在,就构造出line_dict lines_dict[key] = [] else: if os.path.exists(picture_name): # 如果图片的路径存在,就将图片的路径添加在字典中 lines_dict[key].append(picture_name) keys = lines_dict.keys() dataset = [] # 使用类构造出key,和图片的list_file for key in keys: print(key) print(lines_dict[key]) dataset.append(Dict_image(key, lines_dict[key])) return dataset class Dict_image(): def __init__(self, data_dir, list_file): self.data_dir = data_dir self.list_file = list_file def p(self): print('1') # 将读入的列表的class的属性提取,构造出image_list 和 label_list def get_image_paths_and_labels(train_set): image_list = [] label_list = [] for i in range(len(train_set)): image_list += train_set[i].list_file label_list += [i] * len(train_set[i].list_file) return image_list, label_list data_dir = 'casia_maxpy_mtcnnalign_182_160' list_file = 'cleaned_list.txt' train_set = dataset_from_list(data_dir, list_file) image_list, label_list = get_image_paths_and_labels(train_set)