(原创)使用Python自动对子文件夹中的图片文件进行重命名
为了解决Python深度学习的时候,经常遇到的文件名问题
import os # 获取指定目录下的所有子文件夹 def get_subfolders(path): subfolders = [] try: for item in os.listdir(path): item_path = os.path.join(path, item) if os.path.isdir(item_path): subfolders.append(item_path) except FileNotFoundError: print(f"Error: path {path} not found.") return subfolders # 重命名指定目录下的所有子文件夹中的图片文件 def rename_image_files_in_subfolders(path): subfolders = get_subfolders(path) for subfolder in subfolders: subfolder_name = os.path.basename(subfolder) try: for index, file_name in enumerate(os.listdir(subfolder)): file_path = os.path.join(subfolder, file_name) if not os.path.isfile(file_path): continue file_ext = os.path.splitext(file_name)[1].lower() if file_ext not in ['.jpg', '.jpeg', '.png', '.bmp', '.gif','.jpe']: # 仅处理常见的图片格式 continue new_file_name = f"{subfolder_name}_{index+1}{file_ext}" new_file_path = os.path.join(subfolder, new_file_name) os.rename(file_path, new_file_path) except PermissionError: print(f"Error: failed to rename files in subfolder {subfolder}.") continue # 测试 if __name__ == '__main__': path = '.' rename_image_files_in_subfolders(path)
这个程序中,get_subfolders函数和rename_image_files_in_subfolders函数与之前的实现类似。但是,为了处理不仅是jpg格式的图片文件,我对rename_files_in_subfolders函数进行了修改。首先,对于每个文件,使用os.path.splitext函数获取文件名和文件扩展名,然后将扩展名转化为小写格式。接着,判断文件扩展名是否在常见的图片格式中,如果不在则跳过该文件。最后,将新的文件名设置为"{子文件夹名称}_{序号}{文件扩展名}"的格式,将原文件名修改为新文件名。
由于这个程序需要处理多种文件格式,因此可能会比之前的实现慢一些。如果程序的性能成为问题,可以考虑使用多线程或异步IO等技术来加速处理过程。