【Python脚本】按字符串顺序重命名图片文件

背景

用于整理SD批量生成的图片和Prompt(txt)集,同样适用于名字混乱,待排序的图片集文件

功能介绍

对指定文件夹中的jpg和png文件按照字符串排序顺序进行数字编号(主要功能),并将与图片同名的txt文件修改为相应的编号(附加功能)

import os

def get_sorted_files(folder_path):
    jpg_files = []
    png_files = []
    txt_files = []

    for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)

        if os.path.isfile(file_path):
            if file_name.lower().endswith('.jpg'):
                jpg_files.append(file_name)
            elif file_name.lower().endswith('.png'):
                png_files.append(file_name)
            elif file_name.lower().endswith('.txt'):
                txt_files.append(file_name)

    jpg_files.sort()
    png_files.sort()
    txt_files.sort()

    return jpg_files, png_files, txt_files

def rename_files(folder_path):
    jpg_files, png_files, txt_files = get_sorted_files(folder_path)

    file_count = len(jpg_files) + len(png_files)
    file_count_digits = len(str(file_count))

    for index, file_name in enumerate(jpg_files):
        new_file_name = f'{str(index+1).zfill(file_count_digits)}.jpg'
        src = os.path.join(folder_path, file_name)
        dst = os.path.join(folder_path, new_file_name)
        os.rename(src, dst)

        txt_file_name = f'{os.path.splitext(file_name)[0]}.txt'
        if txt_file_name in txt_files:
            new_txt_file_name = f'{str(index+1).zfill(file_count_digits)}.txt'
            txt_src = os.path.join(folder_path, txt_file_name)
            txt_dst = os.path.join(folder_path, new_txt_file_name)
            os.rename(txt_src, txt_dst)

    for index, file_name in enumerate(png_files):
        new_file_name = f'{str(index+1+len(jpg_files)).zfill(file_count_digits)}.png'
        src = os.path.join(folder_path, file_name)
        dst = os.path.join(folder_path, new_file_name)
        os.rename(src, dst)

        txt_file_name = f'{os.path.splitext(file_name)[0]}.txt'
        if txt_file_name in txt_files:
            new_txt_file_name = f'{str(index+1+len(jpg_files)).zfill(file_count_digits)}.txt'
            txt_src = os.path.join(folder_path, txt_file_name)
            txt_dst = os.path.join(folder_path, new_txt_file_name)
            os.rename(txt_src, txt_dst)

folder_path = input(r"请输入要处理的文件夹路径(示例:E:\sd\txt2img\txt2img): ")
rename_files(folder_path)

代码说明

  • get_sorted_files(folder_path):获取指定文件夹中的jpg、png和txt文件,并按照文件名进行排序。
  • rename_files(folder_path):对指定文件夹中的文件进行重命名操作。
  • jpg_filespng_filestxt_files:分别存储jpg、png和txt文件的列表。
  • file_count:统计jpg和png文件的总数。
  • file_count_digits:确定文件总数的位数。
  • 对于jpg和png文件:
    • 使用enumerate函数遍历文件列表,并使用index进行编号。
    • 根据编号和位数生成新的文件名。
    • 使用os.rename函数对文件进行重命名操作。
    • 根据文件名生成相应的txt文件名。
    • 如果txt文件名在txt_files列表中存在,则对txt文件进行相应的重命名操作。
  • folder_path:待处理的文件夹路径,需要将其替换为实际的文件夹路径。
  • rename_files(folder_path):调用该函数来执行对文件夹中文件的重命名操作。

使用教程

假设有一个存放待排序图片集的文件夹test
待排序文件夹
获取其文件绝对路径E:\test
文件绝对路径
打开后Python的IDE,复制代码并运行,在输入中键入待排序文件的绝对路径
在这里插入图片描述
按下回车键Enter后,程序执行,可以观察到相应文件夹下的图片已经做了重命名处理
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值