Meglass数据集/人脸眼镜数据集
txt文件中标明了0/1 代表 无眼镜/佩戴眼镜
想按照 0/1 将两类数据分开,并且每个人的人脸图像放在一个文件夹内!
参考博文:python根据txt标签文档,划分数据集_肥猫猫plus的博客-CSDN博客_txt文档数据集
第一步:按照label 创建对应文件夹
会创建名字为0 1 的两个文件夹
import os
path = 'file_create' #设置创建后文件夹存放的位置,和本次程序文件同一目录下
for i in range(2): #这里创建2个文件夹,有多少类,就修改为多少
# *定义一个变量判断文件是否存在,path指代路径,str(i)指代文件夹的名字*
isExists = os.path.exists(path+str(i))
if not isExists: #判断如果文件不存在,则创建
os.makedirs(str(i))
print("%s 目录创建成功"%i)
else:
print("%s 目录已经存在"%i)
# continue #如果文件不存在,则继续上述操作,直到循环结束
第二步:按照label 单独创建对应的list
会创建名字为0 1 的两个txt文件,分别保存对应图像名称
file = open('meta.txt','r') #打开txt文件
line = '1' #给line赋个值,循环用
while line != '': #读完就停止循环
line = str(file.readline()) #将读出来的行,给line
label = (line.split(' ', 1))[1] #切分line,读取label值
label = label.rstrip('n') #label里面带了一个讨厌的n,把他去掉!
name = (line.split(' ', 1))[0]
write = open(label +'.txt', 'a') #以追加的方式创建以数字为名的文本文件
write.write(name+'n') #写入行
write.close() #关闭文件
file.close() #关闭文件
第三步:根据list文件中的图片名称把图片放进第一步创建的文件夹中
import os # os是用来切换路径和创建文件夹的。
from shutil import copy # shutil 是用来复制黏贴文件的
file_path = r'.meglssJPG' # 就是你图片的路径
line = '1' # 赋个初值
for i in range(2): # 有多少个类这数字就是多少
file = open(str(i) + '.txt', 'r') # 打开每一类的TXT文件
while line != '': # 读到最后一个再跳出去
print(line) # 观察程序运行用的
line = str(file.readline()).replace('n', '') # 读一行,用空格替代换行符
from_path = os.path.join(file_path, line) # 在文件夹里面找到对应图片
to_path = '.meglss'+ '' + str(i)
print(from_path, to_path) # 观察程序运行的
try: # 因为有些类里面的图片没有,会报错,所以跳过这类错误
copy(from_path, to_path) # 将图片复制过去
except:
pass
file.close()
line = '1' # 因为while循环完line是空格,所以重新赋值
第四步:将文件夹内的图片按name分成子文件夹
import os, shutil, glob
sourcefile = r'.meglss '
# new_file=str(glob.glob(os.path.join(sourcefile,'*.txt')))
JPG = glob.glob(os.path.join(sourcefile, '*.jpg'))
for file_path in JPG:
new_dir = (file_path.split('@',1))[0] # 切分出名字作为子文件夹目录名称
try:
os.makedirs(os.path.join(sourcefile, new_dir))
except:
pass
f = str(new_dir.split('@', 1)[0])
if f in str(new_dir):
shutil.move(file_path, os.path.join(sourcefile, new_dir))
continue
第五步:重新命名图片 以0文件夹为例,格式为“name_00x”
import os
def rename():
path = r'.meglss '
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
for files in filelist: #遍历所有文件
k = 0
k = k + 1
print(files)
paths = os.path.join(path,files)
photolist = os.listdir(paths)
i = 0 #从0开始
for photo in photolist:
i = i + 1
Olddir = os.path.join(path, files, photo) #原来的文件路径
filetype = '.jpg' #文件扩展名
Newdir = os.path.join(path, files, files + '_00' + str(i) + filetype) #新的文件路径
os.rename(Olddir, Newdir) #重命名
if k == 1565 : #1565为文件夹数量
break # 跳出循环
if k != 1565:
continue # 结束本次循环
return True
if __name__ == '__main__':
rename()
大功告成啦!!!!



