import os
import argparsedef delete_class_labels(folder_path, target_class):processed_files = 0removed_entries = 0for filename in os.listdir(folder_path):if not filename.endswith('.txt'):continue # 跳过非txt文件filepath = os.path.join(folder_path, filename)with open(filepath, 'r') as f:lines = f.readlines() # 读取所有行new_lines = []removed = 0for line in lines:stripped_line = line.strip()if not stripped_line:# 保留空行new_lines.append(line)continue# 分割行内容parts = stripped_line.split()try:class_id = int(parts[0])except ValueError:# 无效行(如内容不符合YOLO格式),保留原样new_lines.append(line)continueif class_id != target_class:new_lines.append(line) # 保留非目标类别的行else:removed += 1 # 统计被删除的行# 将修改后的内容写回文件with open(filepath, 'w') as f:f.writelines(new_lines)processed_files += 1removed_entries += removed# 输出统计结果print(f"处理完成!共处理 {processed_files} 个文件,删除了 {removed_entries} 个类别 {target_class} 的标签。")if __name__ == "__main__":parser = argparse.ArgumentParser(description="删除YOLO标签文件中的指定类别标签")parser.add_argument('folder', type=str, help='存放YOLO标签的文件夹路径')parser.add_argument('class_id', type=int, help='要删除的类别编号(整数)')args = parser.parse_args()delete_class_labels(args.folder, args.class_id)
运行脚本:python delete_classLabels.py E:/datasets/excavation_occupyRoad/labels 2
注意需要进入对应的文件夹
import os
import argparsedef modify_class_labels(folder_path, old_class, new_class):modified_files = 0modified_entries = 0for filename in os.listdir(folder_path):if not filename.endswith('.txt'):continue # 跳过非txt文件filepath = os.path.join(folder_path, filename)with open(filepath, 'r') as f:lines = f.readlines() # 读取所有行new_lines = []modified = 0for line in lines:stripped_line = line.strip()if not stripped_line:# 保留空行new_lines.append(line)continue# 分割行内容parts = stripped_line.split()try:class_id = int(parts[0])except ValueError:# 无效行(如内容不符合YOLO格式),保留原样new_lines.append(line)continue# 替换类别IDif class_id == old_class:parts[0] = str(new_class) # 替换为新类别modified += 1new_line = ' '.join(parts) + '\n' # 重建行(保留原始格式)new_lines.append(new_line)else:new_lines.append(line) # 保留其他行# 将修改后的内容写回文件with open(filepath, 'w') as f:f.writelines(new_lines)modified_files += 1modified_entries += modified# 输出统计结果print(f"处理完成!共修改 {modified_files} 个文件,{modified_entries} 个类别 {old_class} → {new_class} 的标签。")if __name__ == "__main__":parser = argparse.ArgumentParser(description="修改YOLO标签文件中的类别编号")parser.add_argument('folder', type=str, help='存放YOLO标签的文件夹路径')parser.add_argument('old_class', type=int, help='原始类别编号(需替换的旧编号)')parser.add_argument('new_class', type=int, help='目标类别编号(替换后的新编号)')args = parser.parse_args()modify_class_labels(args.folder, args.old_class, args.new_class)
运行脚本:python modify_classLabels.py E:/datasets/excavation_occupyRoad/labels 3 1