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

如何用Python批量重命名文件,移除(file no *)格式后缀

解决批量移除(file no *)格式文件名后缀的问题

你的问题在于用了str.replace()——它只能替换固定字符串,没法匹配任意数字的情况。要实现通用替换,正则表达式是最合适的工具,能精准匹配你描述的(file no *)格式后缀(*代表任意数字)。

下面是改进后的代码,我会一步步解释其中的关键点:

import os
import re

directoryname = "/media/username/New Volume/"
listFiles = os.listdir(directoryname)
print("原文件列表:")
print(listFiles)

for filename in listFiles:
    # 先过滤掉目录中的文件夹,只处理文件
    full_path = os.path.join(directoryname, filename)
    if not os.path.isfile(full_path):
        continue
    
    # 正则替换核心逻辑
    # 模式 r'\s*\(file no \d+\)$' 的含义:
    # - \s*: 匹配后缀前可能存在的0个或多个空格(避免重命名后文件名末尾留空格)
    # - \(file no \d+\): 匹配字面的 (file no 数字),其中 \d+ 代表1个或多个任意数字
    # - $: 确保这个模式只出现在文件名的末尾,防止误改文件名中间的类似内容
    new_filename = re.sub(r'\s*\(file no \d+\)$', '', filename)
    
    # 只有当文件名确实需要修改时才执行重命名操作
    if new_filename != filename:
        os.rename(full_path, os.path.join(directoryname, new_filename))
        print(f"已重命名:{filename} → {new_filename}")

print("\n重命名完成后的文件列表:")
print(os.listdir(directoryname))

几个重要的改进说明:

  • 正则表达式的使用:re.sub()可以根据模式匹配并替换内容,\d+完美解决了"任意数字"的匹配需求,转义的\(和\)确保匹配字面的括号。
  • 过滤文件夹:添加了os.path.isfile()判断,避免误操作目录中的子文件夹。
  • 安全检查:只有当新文件名和原文件名不同时才执行重命名,避免无意义的系统调用。
  • 过程可视化:增加了打印提示,能清晰看到每个文件的重命名情况,方便排查问题。

额外建议:

在执行批量重命名前,建议先备份目标目录的文件,或者先注释掉os.rename()这一行,只打印重命名的结果,确认没问题后再执行实际的重命名操作,避免意外丢失或损坏文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:29