背景
用于整理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_files
、png_files
、txt_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
后,程序执行,可以观察到相应文件夹下的图片已经做了重命名处理