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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:01