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

使用正则表达式批量重命名指定模式文件的代码实现求助

解决方案

首先,你的代码核心问题在于os.path.exists()和os.rename()不支持正则表达式,而且嵌套循环遍历所有组合完全没必要——直接匹配目标格式的文件更高效。

下面是两种可行的实现方式:

方式1:用glob快速匹配+字符串替换(最简单)

如果文件名里的aa仅以_aa_结构出现一次,直接用字符串替换就能完成需求,无需正则:

import os
import glob

# 匹配当前目录下所有包含"_aa_"的文件
for file_path in glob.glob("./*_aa_*"):
    filename = os.path.basename(file_path)
    # 替换指定字符串
    new_filename = filename.replace("_aa_", "_zz_")
    # 执行重命名
    os.rename(file_path, os.path.join(os.path.dirname(file_path), new_filename))

方式2:用正则表达式精确匹配(更严谨)

如果需要严格确保文件名符合[c开头的组合]_aa_[数字]格式,用re模块做精准匹配和替换:

import os
import re

# 正则模式:匹配开头的c系列组合、中间的aa、末尾的数字
pattern = re.compile(r'^(c\d+)+_aa_(\d+)$')

# 遍历当前目录所有文件
for filename in os.listdir("."):
    match_result = pattern.match(filename)
    if match_result:
        # 提取需要保留的前缀和后缀
        prefix_part = match_result.group(1)
        suffix_num = match_result.group(2)
        # 构造新文件名
        new_filename = f"{prefix_part}_zz_{suffix_num}"
        # 执行重命名
        os.rename(filename, new_filename)

原代码失效原因

  • os.path.exists()只识别具体路径字符串,(.*)会被当成普通字符处理,无法实现正则匹配,因此永远找不到目标文件。
  • 嵌套循环遍历所有con_list组合会做大量无效检查(比如不存在的c8c11c10组合),完全是冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:15:37