Bootstrap

Python实现为分类图像文件添加类别后缀

一、问题描述

分享一个学习中遇到的问题,在图像分类任务中,通常需要对不同类别的图像进行标注。假设我们有一个包含多个子目录的图像数据集,每个子目录代表一个类别,而目录中的图像文件名可能没有明确的类别标识。为了方便后续处理,我们需要为每个目录下的所有图像文件添加一个统一的数字后缀,以表示它们所属的类别。

二、Python代码

def add_suffix_to_paths(file_path):
    # 读取文件内容
    with open(file_path, 'r') as file:
        lines = file.readlines()
    
    # 按目录分组
    directory_groups = {}
    for line in lines:
        line = line.strip()  # 去除换行符
        directory = line.rsplit('/', 1)[0]  # 获取目录部分
        if directory not in directory_groups:
            directory_groups[directory] = []
        directory_groups[directory].append(line)
    
    # 为每个目录下的文件分配统一的后缀
    output_lines = []
    suffix = 0  # 后缀从0开始
    for directory, files in sorted(directory_groups.items()):  # 按目录排序
        for file in sorted(files):  # 按文件名排序
            new_path = f"{file} {suffix}"  # 在文件名后添加空格和数字后缀
            output_lines.append(new_path)
        suffix += 1  # 每个目录后缀递增
    
    # 将结果写入新文件
    output_file = "output.txt"
    with open(output_file, 'w') as file:
        file.write("\n".join(output_lines))
    
    print(f"处理完成,结果已保存到 {output_file}")

# 调用函数
add_suffix_to_paths("你的文件名.txt")

三、代码说明

  1. 读取文件:你的文件名.txt中读取所有路径。

  2. 按目录分组:使用rsplit('/', 1)[0]提取路径的目录部分,并将文件按目录分组。

  3. 分配统一后缀:为每个目录下的所有文件分配同一个数字后缀,后缀从0开始,按目录顺序递增。

  4. 保存结果:将处理后的路径保存到output.txt文件中。

四、示例输出

  • 假设train.txt中有以下内容:
train/zero/a.jpg
train/zero/b.jpg
train/one/a.jpg
train/one/b.jpg
train/two/a.jpg
train/two/b.jpg
train/three/a.jpg
train/three/b.jpg
  • 处理后的output.txt内容将是:
train/zero/a.jpg 0
train/zero/b.jpg 0
train/one/a.jpg 1
train/one/b.jpg 1
train/two/a.jpg 2
train/two/b.jpg 2
train/three/a.jpg 3
train/three/b.jpg 3

五、使用方法

  1. 将上述代码保存为一个Python脚本文件,例如add_suffix.py

  2. 确保train.txt文件与脚本在同一目录下。

  3. 运行脚本

    python add_suffix.py
  4. 处理后的结果将保存到output.txt文件中。

;