使用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
相关产品推荐
相关产品推荐

