You need to enable JavaScript to run this app. Python批量移除文件夹内文件名数字 代码打印正确却未实际重命名
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 11:06:03