如何使用Python批量重命名指定目录下的XML文件并提取目标文件名片段
Python批量重命名指定规则XML文件方案
推荐使用正则匹配实现,规则匹配精准,不会出现字符串分割的边界异常问题,完整可运行代码如下:
import os import re # 正则规则:捕获第二个下划线之后、_202前缀片段之前的内容 file_pattern = re.compile(r'^[^_]*_[^_]*_(.+?)_202.*\.xml$') if __name__ == "__main__": for filename in os.listdir('.'): match_result = file_pattern.match(filename) if not match_result: continue # 提取目标片段生成新文件名 new_filename = f"{match_result.group(1)}.xml" # 重名校验,避免覆盖已有文件,不需要可删除 if os.path.exists(new_filename): print(f"跳过{filename}:目标文件名{new_filename}已存在") continue # 执行重命名 os.rename(filename, new_filename) print(f"已处理:{filename} → {new_filename}")
规则说明
正则^[^_]*_[^_]*_(.+?)_202.*\.xml$的匹配逻辑:
^[^_]*_[^_]*_:匹配文件名开头到第二个下划线的所有内容,自动跳过前两部分不需要的字符(.+?):非贪婪匹配,捕获我们需要的目标文件名片段_202.*\.xml$:匹配_202开头到.xml后缀的所有内容,确保只有符合命名规则的文件才会被处理
替代实现(字符串分割版本)
如果不想引入正则依赖,也可以用字符串分割实现,仅适合确定所有待处理文件名仅含一个_202片段的场景:
import os if __name__ == "__main__": for filename in os.listdir('.'): if not (filename.endswith('.xml') and '_202' in filename): continue # 去掉后缀后按_202分割 name_without_suffix = filename.rsplit('.xml', 1)[0] part_before_202 = name_without_suffix.split('_202', 1)[0] # 跳过前两个下划线对应的片段 target_name = '_'.join(part_before_202.split('_')[2:]) new_filename = f"{target_name}.xml" if os.path.exists(new_filename): print(f"跳过{filename}:目标文件名{new_filename}已存在") continue os.rename(filename, new_filename) print(f"已处理:{filename} → {new_filename}")
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

