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

Python os.rename无法重命名文件,报FileNotFoundError问题求助

解决文件重命名时的FileNotFoundError问题

问题根源

从输出和错误信息能明确两个核心问题:

  1. 路径分隔符混用:Windows系统默认使用反斜杠\,但代码中将带反斜杠的root路径与文件名用/拼接,生成的路径同时包含两种分隔符,导致操作系统无法识别,因此os.path.exists(original_file_path)返回False。
  2. 重复执行重命名:代码里连续调用了两次os.rename,第一次已经完成文件重命名,第二次调用时原文件已不存在,直接触发找不到文件的错误。

修复方案

  1. 用os.path.join构造路径:该方法会自动根据操作系统选择正确的路径分隔符,彻底避免分隔符混用问题。
  2. 移除重复的os.rename调用:仅保留一次重命名操作即可。
  3. 可选:规范化路径:用os.path.normpath()确保路径格式统一,方便排查问题。

修复后的完整代码

import os

def extract_info_from_filename(file_name):
    parts = file_name.split('Z')
    part1 = parts[0]
    part2 = parts[1]
    
    return part1, part2

def find_csv_files_to_rename(directory):
    for root, dirs, files in os.walk(directory):
        if 'rename' in root:
            for file_name in files:
                if file_name.endswith('.csv'):
                    # 用os.path.join构造正确路径
                    original_file_path = os.path.join(root, file_name)
                    print(f"File Name: {file_name}, Extracted Info: {extract_info_from_filename(file_name)}")
                    
                    extracted_parts = extract_info_from_filename(file_name)
                    new_file_name = f"{extracted_parts[0]}Z_treatment{extracted_parts[1]}"
                    print(f"New File name: {new_file_name}")
                    
                    new_file_path = os.path.join(root, new_file_name)
                    # 规范化路径,确保格式统一
                    original_file_path = os.path.normpath(original_file_path)
                    new_file_path = os.path.normpath(new_file_path)
                    
                    print(f"New File Path Exists: {os.path.exists(new_file_path)}")
                    print(f"Original File Path Exists: {os.path.exists(original_file_path)}")
                    print(f"Root: {root}")
                    print(f"New file path: {new_file_path}")
                    
                    if not os.path.exists(new_file_path):        
                        try:
                            os.rename(original_file_path, new_file_path)
                            print(f'Renamed: {file_name} -> {new_file_name} \n')
                        except Exception as e:
                            print(f'重命名失败: {str(e)} \n')
                    else:
                        print(f'文件已存在: {original_file_path} \n')

root_directory = 'input_files'
find_csv_files_to_rename(root_directory)

额外说明

  • 添加try-except块可捕获权限不足等其他异常,便于排查问题。
  • os.path.normpath()会自动统一路径分隔符,适配不同操作系统的路径格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:33:20