使用正则表达式批量重命名指定模式文件的代码实现求助
解决方案
首先,你的代码核心问题在于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
相关产品推荐
相关产品推荐

