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

如何自动遍历列表项并执行专属操作:批量重命名图像序列文件

批量重命名多组图像序列文件

需求说明

目录下有以下多组图像序列文件:

  • foo.1001.exr
  • foo.1002.exr
  • bar.1001.exr
  • bar.1002.exr

需要给每个序列的文件名前缀添加_test,重命名后得到:

  • foo_test.1001.exr
  • foo_test.1002.exr
  • bar_test.1001.exr
  • bar_test.1002.exr

要求自动识别所有不同的序列前缀,适配任意数量的序列,避免文件覆盖。

当前问题

我已经能提取出所有唯一的序列前缀,但不知道如何自动遍历这些前缀来处理所有序列,以下是我的初始代码:

import os

dir = "/test/"

# File formats
imageFileFormats = (".exr", ".dpx")

fileName = []
for file in os.listdir(dir):
    for ext1 in imageFileFormats:
        if ext1 in file:
            fileName.append(file.split('.')[0])

newList = list(set(fileName))
newList.sort()

for file in os.listdir(dir):
    for ext1 in imageFileFormats:
        if ext1 in file:
            if newList[0] in file:
                print (file)

解决方案

优化后的代码

import os

target_dir = "/test/"
image_formats = (".exr", ".dpx")

# 提取所有唯一的序列前缀
prefixes = set()
for filename in os.listdir(target_dir):
    # 仅处理指定格式的图像文件
    if filename.lower().endswith(image_formats):
        # 按点分割文件名,确保结构是「前缀.帧号.扩展名」
        parts = filename.split('.')
        if len(parts) >= 3:
            prefix = parts[0]
            prefixes.add(prefix)

# 遍历每个前缀,批量重命名对应序列
for prefix in sorted(prefixes):
    for filename in os.listdir(target_dir):
        if filename.lower().endswith(image_formats) and filename.startswith(f"{prefix}."):
            parts = filename.split('.')
            frame_num = parts[-2]
            ext = parts[-1]
            # 构造新文件名
            new_filename = f"{prefix}_test.{frame_num}.{ext}"
            # 拼接完整路径(适配不同系统)
            old_full_path = os.path.join(target_dir, filename)
            new_full_path = os.path.join(target_dir, new_filename)
            
            # 检查目标文件是否存在,防止覆盖
            if not os.path.exists(new_full_path):
                os.rename(old_full_path, new_full_path)
                print(f"完成重命名: {filename} → {new_filename}")
            else:
                print(f"跳过操作: {new_filename} 已存在,避免覆盖")

代码改进点说明

  1. 更准确的格式判断:用endswith替代in,避免文件名中间出现格式后缀导致的误判
  2. 自动遍历所有前缀:直接遍历sorted(prefixes)集合,不管有多少组序列都能自动处理
  3. 安全重命名:重命名前检查目标文件是否存在,防止覆盖已有文件
  4. 路径兼容性:用os.path.join拼接路径,适配Windows、Linux等不同操作系统
  5. 鲁棒性提升:增加文件名结构判断,避免异常格式的文件导致代码出错

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:34