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

如何用Python批量移除多个文件名中的相同部分?代码循环未执行

问题分析与解决

你的代码存在几个关键问题,导致批量改名操作没生效:

  • os.walk返回的file_name是当前目录下所有文件名的列表,不是单个文件名,直接判断"new_" in file_name是检查列表里是否存在这个字符串,根本不会遍历每个文件。
  • if语句后的代码块没有缩进,属于语法错误,Python会直接报错,程序根本无法正常运行。
  • 重命名时只使用了文件名,没有拼接当前目录的完整路径,os.rename会在你运行脚本的当前工作目录找文件,而非os.walk遍历到的子目录。
  • 大小写不匹配:你的文件名是New_开头,代码里判断的是小写new_,自然匹配不到目标文件。
修正后的代码
import os

# 目标根目录,用原始字符串避免转义问题
root_path = r"D:\Python\Scripts"

for root_dir, _, file_names in os.walk(root_path):
    # 遍历当前目录下的每个文件名
    for file in file_names:
        # 匹配开头为New_的文件
        if file.startswith("New_"):
            # 拼接完整的旧文件路径
            old_full_path = os.path.join(root_dir, file)
            # 移除开头的New_
            new_file_name = file.replace("New_", "")
            # 拼接完整的新文件路径
            new_full_path = os.path.join(root_dir, new_file_name)
            # 执行重命名
            os.rename(old_full_path, new_full_path)
补充说明

如果需要兼容大小写(比如文件名存在NEW_、new_等变体),可以用正则忽略大小写处理:

import os
import re

root_path = r"D:\Python\Scripts"

for root_dir, _, file_names in os.walk(root_path):
    for file in file_names:
        # 忽略大小写匹配开头的new_
        new_file_name = re.sub(r'^new_', '', file, flags=re.IGNORECASE)
        if new_file_name != file:
            old_full_path = os.path.join(root_dir, file)
            new_full_path = os.path.join(root_dir, new_file_name)
            os.rename(old_full_path, new_full_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:14:59