(原创)使用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等技术来加速处理过程。