#!/usr/bin/env python
# -*- coding:UTF-8 -*-
# 2020/1/10 修改为通用尾缀可用脚本
import os
import random
# Img_dir 为图片数据集所在的路径
# bias 为最终的偏置量,'-1'表示将图片的名称变短一个字符
# 假设原来的图片的名称为 00001234.jpeg
# 传入 bias = 1 会让图片前面增加一个0,同时是随机处理的
# 传入 bias = -1 会让图片前面减少一个0,同时名字也会随机处理
# fix_len 为对只指定的文件名的.之前的数字的个数
# 例如,设置fix_len的值为8,可以设置数值的长度为8
# 最终得到的图片的命名应该类似 12345678.jpg
# 默认通过增加一位数据的长度来避免冲突
# 当然也可以通过调用两次分别对bias传参为+1和-1来进行处理
# 当 fix_len 被指定的时候,bias参数失效
def random_rename_imgs(Img_dir, bias=1, fix_len=-1):
file_name_list = os.listdir(Img_dir)
random.shuffle(file_name_list)
# 计算不是xml的文件,得到所有的图片数据数量counter
counter = 0
for filename in file_name_list:
# 找打文件的最后一个点下标
find_index = filename.rfind('.')
# 如果能够找到这个点,说明是有效格式文件
if find_index != -1:
# 仅对指定的图片文件做相应操作
# 从最后一个'.'处将文件名切割含有三个部分得list
file_suffix = filename.rpartition(".")[-1]
valid_file_suffixes = ['jpg', 'bmp', 'png', 'gif', 'tiff', 'raw', 'jpeg']
file_name_is_valid = False
for valid_suffix in valid_file_suffixes:
if file_suffix == valid_suffix:
file_name_is_valid = True
# 如果是复合要求得文件类型
if file_name_is_valid:
print("filename=", filename, end="\n")
counter = counter + 1
# 重命名为+1个零,防止重命名冲突
# 判断是否有设置默认的长度
# 如果设置了默认的长度,即传入了fix_len > 0
if fix_len > 0:
new_name = str(counter).zfill(fix_len) + "." + file_suffix
else:
new_name = str(counter).zfill(len(filename) - (len(file_suffix) + 1) + bias) + "." + file_suffix
os.rename(os.path.join(Img_dir, filename), os.path.join(Img_dir, new_name))
if __name__ == "__main__":
Img_dir=r'C:\Users\DELLT620\Desktop\YoloProject-vs17 cuda102\TrainDataPrepare\1_label\ori'
# random_rename_imgs(Img_dir, +1)
random_rename_imgs(Img_dir, -1, 6)