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

Python正则批量重命名图片时扩展名异常问题求助

批量重命名图片文件添加_resized后缀的问题解决

原代码的问题分析

  • 正则表达式字符组使用错误:[a-z|0-9]中的|会被当作普通字符匹配,且仅匹配单个字母/数字,无法覆盖文件名中的空格、连字符等合法字符。
  • 扩展名匹配逻辑错误:[jpb|pnm|ggp]完全不符合jpg/png/bmp的格式,且仅匹配单个字符,导致扩展名被错误拆分替换。
  • 正则分组逻辑错误:没有正确捕获完整的文件名前缀和扩展名,导致替换后格式混乱。

解决方案

方案1:修正正则表达式

调整正则规则,正确捕获完整的文件名前缀和扩展名,替换时在前缀后添加_resized:

import glob
import re

files = glob.glob('*.jpg') + glob.glob('*.png') + glob.glob('*.bmp')

for x in files:
    # 匹配开头到最后一个.的所有内容,以及后面的jpg/png/bmp扩展名
    new_file = re.sub(r'^(.*)\.(jpg|png|bmp)$', r'\1_resized.\2', x, flags=re.IGNORECASE)
    print(new_file, ' : ', x)

说明:flags=re.IGNORECASE可兼容大小写扩展名(如JPG、Png),无需兼容可直接删除该参数。

方案2:使用os.path模块更稳妥

处理文件名推荐用Python标准库的os.path模块,避免正则的边界问题(比如文件名包含多个点的情况):

import glob
import os

files = glob.glob('*.jpg') + glob.glob('*.png') + glob.glob('*.bmp')

for x in files:
    # 拆分文件名和扩展名
    name, ext = os.path.splitext(x)
    new_file = f"{name}_resized{ext}"
    print(new_file, ' : ', x)
    # 若需要实际执行重命名,取消注释下面一行
    # os.rename(x, new_file)

该方法逻辑直观,能处理所有合法文件名,无需考虑正则匹配的边界漏洞。

测试效果

对于输入Batman - The Grey Ghost.png、Mom and Dad - Young.jpg,两种方案均会输出预期的Batman - The Grey Ghost_resized.png、Mom and Dad - Young_resized.jpg,不会出现扩展名拆分错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24