代码
无前缀
import os
import shutil
def rename_file(target_directory, output_directory, overwrite=False):
# 获取目录下所有文件
files = os.listdir(target_directory)
# 过滤出所有图片文件
image_files = [file for file in files if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp'))]
# 按文件修改时间排序
image_files.sort(key=lambda x: os.path.getmtime(os.path.join(target_directory, x)))
# 确保输出目录存在(如果需要)
if not overwrite and not os.path.exists(output_directory):
os.makedirs(output_directory)
# 按照时间顺序重命名图片文件并复制到输出目录
renamed_files = []
for i, file in enumerate(image_files, 1):
# 构造新文件名
_, ext = os.path.splitext(file)
new_name = f"{i:03d}{ext}"
new_path = os.path.join(output_directory if not overwrite else target_directory, new_name)
# 检查新文件名是否已经存在
if os.path.exists(new_path):
print(f'命名文件已存在,跳过: {new_name}')
renamed_files.append(new_name)
continue
if overwrite:
# 覆盖原文件
os.rename(os.path.join(target_directory, file), new_path)
print(f'已重命名并覆盖: {file} -> {new_name}')
else:
# 复制并重命名文件
shutil.copy2(os.path.join(target_directory, file), new_path)
print(f'已重命名并复制: {file} -> {new_name}')
renamed_files.append(new_name)
print("图片文件已按照时间顺序重命名并复制到输出目录。" if not overwrite else "图片文件已按照时间顺序重命名并覆盖原文件。")
# 指定要重命名的目录和输出目录
directory_path = r'D:\Pictures\pixiv'
output_path = r'D:\Pictures\pixiv\output'
# 指定是否覆盖已存在的文件
overwrite_files = True # True表示覆盖原文件,False表示输出到指定目录
# 调用函数进行重命名和复制,选择是否覆盖原文件
rename_file(directory_path, output_path, overwrite=overwrite_files) # False表示输出到指定目录,True表示覆盖原文件
有前缀
import os
import shutil
def rename_file(target_directory, output_directory, file_prefix, overwrite=False):
"""
重命名目标目录中的图片文件,并将它们复制到输出目录或进行覆盖。
参数:
target_directory: 字符串,源图片文件所在的目录。
output_directory: 字符串,重命名后的图片文件将复制到这个目录。
file_prefix: 字符串,重命名后的文件名将添加这个前缀。
overwrite: 布尔值,如果为True,则重命名后的文件将覆盖输出目录中已存在的文件;如果为False,则不会覆盖。
"""
# 遍历文件夹中的文件
files = os.listdir(target_directory)
# 过滤出jpg、png和webp格式的图片文件
files = [f for f in files if f.endswith(('.jpg', '.png', '.webp'))] # 过滤图片文件
# 按时间顺序排序文件
files.sort(key=lambda x: os.path.getmtime(os.path.join(target_directory, x)))
# 确保输出目录存在(如果需要)
if not overwrite and not os.path.exists(output_directory):
os.makedirs(output_directory)
# 遍历排序后的文件列表,重命名并复制到输出目录
for i, file in enumerate(files, start=1):
old_path = os.path.join(target_directory, file)
# 构造新文件名
new_filename = f'{file_prefix}{str(i).zfill(3)}{os.path.splitext(file)[1]}'
# 根据是否覆盖文件,确定新文件路径
new_path = os.path.join(output_directory if not overwrite else target_directory, new_filename)
# 如果新文件已存在,则跳过当前文件
if os.path.exists(new_path):
print(f'跳过重命名: {file}')
else:
# 根据是否覆盖文件,选择重命名或复制文件
if overwrite:
os.rename(old_path, new_path)
print(f'已重命名并覆盖: {file} -> {new_filename}')
else:
shutil.copy2(old_path, new_path)
print(f'已重命名并复制: {file} -> {new_filename}')
print("图片文件已按照时间顺序重命名并复制到输出目录。" if not overwrite else "图片文件已按照时间顺序重命名并覆盖原文件。")
# 指定源目录、输出目录和文件名前缀
# 指定要重命名的目录和输出目录
directory_path = r'D:\Pictures\pixiv'
output_path = r'D:\Pictures\pixiv\output'
prefix = 'pixiv-'
# 指定是否覆盖已存在的文件
overwrite_files = True # True表示覆盖原文件,False表示输出到指定目录
# 调用函数执行重命名操作
rename_file(directory_path, output_path, prefix, overwrite=overwrite_files)
评论区