"""
Author: Fanxing Shang
Date: 2023-2-1
   //////////////////// __3号脚本__  ->  'test03.py'//////////////////////

    __用途__  ->  用于多人协同标注yolo数据集出现类先后不同的情况。根据以下代码可以批量修改一个文件夹中所有符合 label 格式的txt文件（不会修改class.txt）
    __原理__  ->  yolo数据集的label根据class.txt文件的先后顺序，从0、1、2、3、4......依次排序，在多人协同完成数据集标注时，如果不同标注者给予的标注次序
                 不同，可根据此脚本结合自定义的标注规范对对应不同的数字所代表的类进行进行替换

        【例】  团队规范的label顺序(class.txt)：             你的label顺序(class.txt)
                purple_box                                  blue_box
                red_box                                     purple_box
                blue_box                                    red_box
        将采用以下脚本完成对所有label的txt文件的修改
"""
import os
def modify_txt_files(folder_path):
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.txt'):  # 确保是txt文件
            file_path = os.path.join(folder_path, file_name)
            with open(file_path, 'r') as file:
                lines = file.readlines()

            modified_lines = []
            for line in lines:                                        #需要修改的地方(1)
                if line.strip() and line[0] in ['0', '1', '2']:  # ['0', '1', '2']处有n个类就填'0','1',...,'n-1'
                                                                      # 需要修改的地方(2)
                    if line[0] == '0':                           # line[0] == '0':      填对应的映射关系，这里是把你的0类映射为规范的2类,下同
                        modified_lines.append('2' + line[1:])    #     modified_lines.append('2' + line[1:])
                    elif line[0] == '1':
                        modified_lines.append('0' + line[1:])
                    elif line[0] == '2':
                        modified_lines.append('1' + line[1:])
                    else:
                        modified_lines.append(line)
                else:
                    modified_lines.append(line)

            # 写回文件
            with open(file_path, 'w') as file:
                file.writelines(modified_lines)

# 使用示例                         # 需要修改的地方(3)
folder_path = 'xxxxxxx\\labels'  # 替换为你的文件夹路径
modify_txt_files(folder_path)
