栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 根据label给图片批量重命名

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 根据label给图片批量重命名

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()

大功告成啦!!!!

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号