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

使用Python按不同前缀批量重命名同类型文件

批量按前缀重置计数器重命名.fxp文件

需求:将目录中同前缀、同.fxp扩展名的文件按前缀分组,以从1开始的增量计数器重命名,前缀变化时计数器重置。

原文件示例

BS - foo.fxp
BS - bar.fxp
BS - baz.fxp
...
PD - qux.fxp
PD - quux.fxp
PD - corge.fxp
...
LD - grault.fxp
LD - garply.fxp 
LD - waldo.fxp
...
PL - fred.fxp
PL - plugh.fxp
PL - xyzzy.fxp
... 
DS - thud.fxp
... 

期望重命名结果

BS - 1.fxp
BS - 2.fxp
BS - 3.fxp
...
PD - 1.fxp
PD - 2.fxp
PD - 3.fxp
PD - 4.fxp
...

现有问题代码

现有代码可对文件排序但计数器未按前缀重置,代码如下:

import os, glob
path ='foo/bar/fox' 

def prefix(f):
    if f.endswith('.fxp'): 
        return(f.split(' -')[0])

os.chdir(path)
count = 0 
for f in sorted(os.listdir(path), key = prefix):
    if prefix(f) == f.split(' -')[0]:
        count =+ 1
        new_name = prefix(f) + '_' + str(count)+ '.fxp'
        os.rename(f, new_name)

修改方案

要实现前缀变化时重置计数器,需跟踪当前处理的前缀,并修正语法和文件名格式问题,修改后的代码如下:

import os

path = 'foo/bar/fox'

def get_prefix(filename):
    if filename.endswith('.fxp'):
        # 按" - "分割,取第一部分作为前缀
        return filename.split(' - ')[0]
    return None

os.chdir(path)
current_prefix = None
count = 0

# 按前缀排序文件
for filename in sorted(os.listdir(path), key=get_prefix):
    file_prefix = get_prefix(filename)
    # 跳过非.fxp文件
    if not file_prefix:
        continue
    
    # 当前前缀变化时,重置计数器
    if file_prefix != current_prefix:
        current_prefix = file_prefix
        count = 1
    else:
        count += 1
    
    # 生成符合要求的新文件名
    new_filename = f"{current_prefix} - {count}.fxp"
    # 执行重命名
    os.rename(filename, new_filename)

关键修改点说明

  • 新增current_prefix变量跟踪当前处理的前缀,前缀变化时重置计数器为1
  • 修正原代码中count =+ 1的语法错误,改为count += 1
  • 调整新文件名格式,使用{前缀} - {计数器}.fxp匹配期望结果
  • 增加非.fxp文件的过滤逻辑,避免处理无关文件
  • 优化前缀提取逻辑,确保按" - "(带空格)分割,避免匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:30:31