代码结构:
主目录下有许多子目录,子目录名称遵循1,2,3,4...命名规则,各个子目录中有大量的图片和一个txt文件夹,txt文件夹中包含大量txt文件。以下两份代码可分别实现图片和txt文件名称集体修改,修改规则为:
新文件名 = 子目录名称 + 旧文件名
修改图片:
import os
def rename_images(root_dir):
for folder_name in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder_name)
if os.path.isdir(folder_path):
for i, filename in enumerate(sorted(os.listdir(folder_path))):
if filename.endswith('.jpg'):
old_filepath = os.path.join(folder_path, filename)
new_filename = f"{folder_name.zfill(2)}{filename[:-4].zfill(6)}.jpg"
new_filepath = os.path.join(folder_path, new_filename)
os.rename(old_filepath, new_filepath)
print(f"Renamed {old_filepath} to {new_filepath}")
# 调用函数并指定根目录
root_directory = "E:/datasetbf/mydata/valdata"
rename_images(root_directory)
修改txt文件:
import os
def rename_labels(root_dir):
for folder_name in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder_name)
if os.path.isdir(folder_path):
txt_folder_path = os.path.join(folder_path, 'txt') # 指定 txt 文件夹路径
if os.path.isdir(txt_folder_path):
for i, filename in enumerate(sorted(os.listdir(txt_folder_path))):
if filename.endswith('.txt'):
old_label_filepath = os.path.join(txt_folder_path, filename)
new_label_filename = f"{folder_name.zfill(2)}{filename[:-4].zfill(6)}.txt"
new_label_filepath = os.path.join(txt_folder_path, new_label_filename)
os.rename(old_label_filepath, new_label_filepath)
print(f"Renamed label {old_label_filepath} to {new_label_filepath}")
# 调用函数并指定根目录
root_directory = "E:/datasetbf/mydata/valdata"
rename_labels(root_directory)