当前位置:首页 > Software > Python > 正文内容

(原创)使用Python自动对子文件夹中的图片文件进行重命名

chanra1n2年前 (2023-05-21)Python3052

为了解决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等技术来加速处理过程。

扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/307.html

分享给朋友:

“(原创)使用Python自动对子文件夹中的图片文件进行重命名” 的相关文章

1.Python基本的使用

1.Python基本的使用

我们打开python或者通过运行python也可以,请复制如下代码,然后按下Enter键,看看会发生什么?print('\n'.join([''.join([('MyFpga'[(x-y) % len('MyFpga'...

Python关于turtle的函数名

Python关于turtle的函数名

turtle.forward(distance)                   向当前画笔方向移动distance像素长度turtle.backward(distance)              向当前画笔相反方向移动distance像素长度turtle.right(degree)    ...

for循环

for循环

range()函数range(start,end,step)range()函数返回一个可迭代对象(可理解为一个序列,序列中的数包括start,不包括end)例如range(1,101),返回1-100的序列。range(101),范围0-100的序列。range(1,100,2),返回1,3,5.....

搜索字符串

搜索字符串

常用搜索字符串中子串的方法str.count(substring)      返回str中substring子串出现的无覆盖的次数str.find(s1)                    返回s1在这个字符串的最低下标,如果字符串中不存在s1,则返回-1str.rfind(s1)       ...

列表实例

列表实例

随机生成100个小写字母存入一个列表中,统计26个字母的出现次数。import random def getRandomLetter():     code_a=ord('a')     code_z=ord('z')     x=random.randint(code_a,code_z)...