Python实现大文件/文件夹拆分及按指定结构批量重命名
Python批量拆分图片并重命名实现方案
本方案全程使用Python标准库实现,无第三方依赖,直接调用系统原生IO接口,处理2万张图片无额外性能损耗,自带安全校验逻辑。
实现逻辑
- 自动扫描源文件夹下的图片文件,自动过滤非图片格式文件
- 文件按名称排序后,以每20张为一组拆分
- 自动创建
video_xxxxx格式的子文件夹,编号五位补零对齐,总计生成1000个子文件夹 - 每组内图片重命名为
frame_xxxxx.jpg格式,编号五位补零对齐 - 支持复制/移动两种操作模式,默认复制模式不改动原文件,避免误操作丢失数据
完整代码
import os import shutil from pathlib import Path # -------------------------- 配置项 -------------------------- SOURCE_DIR = Path("替换为你的原图片文件夹绝对/相对路径") TARGET_DIR = Path("替换为输出结果的根目录路径") IMAGES_PER_FOLDER = 20 # 每个子文件夹存放的图片数量 # 支持识别的图片后缀 IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".bmp", ".webp"} # 操作模式:True=复制原文件(安全,不改动源文件夹内容),False=移动原文件 COPY_MODE = True # ----------------------------------------------------------- def main(): # 扫描并过滤所有图片文件 all_images = [] for file in SOURCE_DIR.iterdir(): if file.is_file() and file.suffix.lower() in IMAGE_EXTS: all_images.append(file) # 按文件名字典序排序,需按修改时间排序可替换key为lambda x: x.stat().st_mtime all_images.sort(key=lambda x: x.name) total_images = len(all_images) # 向上取整计算需要的子文件夹总数 total_folders = (total_images + IMAGES_PER_FOLDER - 1) // IMAGES_PER_FOLDER print(f"检测到有效图片{total_images}张,将生成{total_folders}个子文件夹") # 创建输出根目录 TARGET_DIR.mkdir(exist_ok=True, parents=True) for folder_idx in range(total_folders): # 创建当前video子文件夹 video_folder = TARGET_DIR / f"video_{folder_idx:05d}" video_folder.mkdir(exist_ok=True) # 切片获取当前文件夹需要处理的图片 start_idx = folder_idx * IMAGES_PER_FOLDER end_idx = min(start_idx + IMAGES_PER_FOLDER, total_images) current_images = all_images[start_idx:end_idx] # 逐张处理图片 for frame_offset, img_path in enumerate(current_images): target_path = video_folder / f"frame_{frame_offset:05d}.jpg" if COPY_MODE: shutil.copy2(img_path, target_path) else: shutil.move(img_path, target_path) print(f"处理完成:{video_folder.name},共{len(current_images)}张图片") print("全部任务执行完成") if __name__ == "__main__": main()
使用说明
- 运行前先修改配置项中的
SOURCE_DIR和TARGET_DIR为实际路径 - 首次运行保持
COPY_MODE = True,确认输出的目录结构、文件命名完全符合要求后,再将参数改为False执行移动操作 - 代码默认按文件名字典序分配图片,如需按修改时间排序可参考代码注释调整排序规则
- 默认每个子文件夹内的frame编号从00000开始,如果需要全局连续编号(即所有frame编号从00000到19999不重置),将目标文件名的
frame_offset替换为start_idx + frame_offset即可 - 如果需要保留原文件的后缀格式,将目标路径的
.jpg替换为img_path.suffix
内容的提问来源于stack exchange,提问作者Felipe Copceski Rossatto
相关产品推荐
相关产品推荐

