在准备yolov8数据集时经常会遇到文件名称和标注文件名称乱,需要批量序列化名称方法:
在ultralytics的datasets文件夹下创建rename.py
将python代码复制到文件中,
import os
import shutil
def rename_file(path, new_path, xml_path, new_xml):
# 打开源文件图像
file = os.listdir(path)
for i in range(len(file)):
# 获得图像扩展名
(name, extent) = os.path.splitext(file[i])
# 获得图像对应的xml文件
xml_file = os.path.join(xml_path, name + '.xml')
# 源文件
src = os.path.join(path, str(file[i]))
a = 1 + i
# 对应的xml文件复制到新的路径中,并制定新的名称
# shutil.copy(xml_file, os.path.join(new_xml, '0' + str(a) + '.xml')) #如果想新生成的名字不是1,2,3,4... 而是01,02,03.. 只需要把该行代码解除注释
shutil.copy(xml_file, os.path.join(new_xml, str(a) + '.xml'))
# 新图像对应的名字及路径
# new = os.path.join(new_path, '0' + str(a) + '.jpg')
new = os.path.join(new_path, str(a) + '.jpg')
# 文件重命名,且源文件夹中无文件
os.rename(src, new)
if __name__ == "__main__":
path = r'E:\ML-data\VOCdevkit(new)\VOC2007\img' #源图片路径
new_path = r"E:\ML-data\VOCdevkit(new)\VOC2007\JPEGImages"#重命名后图片存储路径
xml_path = r'E:\ML-data\VOCdevkit(new)\VOC2007\xml'#源图片相对应xml文件路径
new_xml = r'E:\ML-data\VOCdevkit(new)\VOC2007\Annotations'#重命名后xml存储路径
rename_file(path, new_path, xml_path, new_xml)
更改代码中new_path、new_path 、xml_path、new_xml 在实际文件夹下的路径。注意,该代码生成图片新名称时,相当于把原来文件夹的图片移到新的文件夹中,原来的文件夹的图片就没了,记得要备份一下再运行代码(xml原文件夹仍然存在,不需要备份)