Python批量移除文件夹内文件名数字 代码打印正确却未实际重命名
问题核心原因
- 重命名逻辑和打印的预期完全脱节:你打印新文件名时用
re.sub()清除了所有位置的数字,但真正执行重命名时用的是strip("0123456789")方法,这个方法只会删除字符串首尾匹配到的数字,文件名中间的数字根本不会被处理。 - 代码看起来完全没有生效的原因:如果你的文件名本身首尾就没有数字(比如
测试123文档.txt),strip()处理后的结果和原文件名完全一致,os.renames检测到新旧路径没有差异时,不会触发实际的改名操作,自然看起来跑完代码没有任何效果。
修正后的可运行代码
import os import re infolder = r'E:/folder/test' def file_rename(): name_list = os.listdir(infolder) print("目标文件夹下所有条目:", name_list) saved_path = os.getcwd() print("原工作路径:", saved_path) os.chdir(infolder) for file_name in name_list: # 仅处理文件,不修改子文件夹,需要修改文件夹名可删除这行判断 if os.path.isdir(file_name): print(f"跳过文件夹:{file_name}") continue old_full_path = os.path.abspath(file_name) # 和打印逻辑完全一致,移除文件名所有位置的数字 new_file_name = re.sub(r'[0-9]', '', file_name) # 新旧文件名一致则跳过,避免无效操作 if new_file_name == file_name: print(f"文件{file_name}无需修改") continue new_full_path = os.path.abspath(new_file_name) print(f"执行重命名:{file_name} -> {new_file_name}") # 捕获重名异常,避免单个文件失败中断全流程 try: os.renames(old_full_path, new_full_path) except FileExistsError: print(f"重命名失败:目标文件名{new_file_name}已存在,已跳过") os.chdir(saved_path) if __name__ == "__main__": file_rename()
实操注意点
- 修正后的代码完全对齐你一开始打印的预期效果,会清除文件名中任意位置的数字,而非仅清除首尾的数字
- 代码加了多层保护:默认跳过子文件夹、无改动的文件直接跳过、遇到重名的新文件不会报错中断流程
- 首次运行建议先把
os.renames()那行注释掉,先打印所有待修改的文件名核对逻辑无误后,再放开注释正式执行,避免误改文件
内容的提问来源于stack exchange,提问作者hbk
相关产品推荐
相关产品推荐

