You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:54:15