一、问题描述
分享一个学习中遇到的问题,在图像分类任务中,通常需要对不同类别的图像进行标注。假设我们有一个包含多个子目录的图像数据集,每个子目录代表一个类别,而目录中的图像文件名可能没有明确的类别标识。为了方便后续处理,我们需要为每个目录下的所有图像文件添加一个统一的数字后缀,以表示它们所属的类别。
二、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")
三、代码说明
-
读取文件:你的文件名
.txt
中读取所有路径。 -
按目录分组:使用
rsplit('/', 1)[0]
提取路径的目录部分,并将文件按目录分组。 -
分配统一后缀:为每个目录下的所有文件分配同一个数字后缀,后缀从0开始,按目录顺序递增。
-
保存结果:将处理后的路径保存到
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
五、使用方法
-
将上述代码保存为一个Python脚本文件,例如
add_suffix.py
。 -
确保
train.txt
文件与脚本在同一目录下。 -
运行脚本
python add_suffix.py
-
处理后的结果将保存到
output.txt
文件中。