最近需要对数据集文件进行重新命名,然后写了下面的代码,仅供参考
# -*- coding:utf8 -*-
import os
# 批量重命名文件夹中的图片文件
class BatchRename():
def __init__(self, imgpath, maskpath, init_tag):
self.imgpath = imgpath # 表示需要命名处理的文件夹
self.maskpath = maskpath # 表示需要命名处理的文件夹
self.init_tag = init_tag
# os.path.isdir(path)
def rename(self):
# os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序
imgfilelist = os.listdir(self.imgpath)
maskfilelist = os.listdir(self.maskpath)
if len(imgfilelist) == len(maskfilelist):
total_num = len(imgfilelist) # 获取文件夹内所有文件个数
print('当前文件夹文件数目:{}'.format(total_num))
else:
raise Exception(print('imgfilelist, maskfilelist长度不一致'))
i = self.init_tag # 表示文件的命名是从124开始的
for imgitem, maskitem in zip(imgfilelist, maskfilelist):
# 初始的图片的格式为png格式的(或者源文件是jpg格式及其他格式,后面的转换格式就可以调整为自己需要的即可)
if imgitem.endswith('.png'):
imgsrc = os.path.join(os.path.abspath(self.imgpath), imgitem)
imgdst = os.path.join(os.path.abspath(self.imgpath), 'img' + str(i) + '.png')
masksrc = os.path.join(os.path.abspath(self.maskpath), maskitem)
maskdst = os.path.join(os.path.abspath(self.maskpath), 'mask' + str(i) + '.png')
# 处理后的格式也为jpg格式的,当然这里可以改成png格式
# dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')
# 这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
try:
os.rename(imgsrc, imgdst)
os.rename(masksrc, maskdst)
print('converting %s to %s and %s to %s...' % (imgsrc, imgdst, masksrc, maskdst))
i = i + 1
except:
continue
print('total %d to rename & converted %d pngs' % (total_num, i))
if __name__ == '__main__':
demo = BatchRename(imgpath=r'H:\Breast Tumor\data-breast-lesion\train_img',
maskpath=r'H:\Breast Tumor\data-breast-lesion\train_gt',
init_tag=1)
demo.rename()