如何用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
相关产品推荐
相关产品推荐

