Python os.rename无法重命名文件,报FileNotFoundError问题求助
解决文件重命名时的FileNotFoundError问题
问题根源
从输出和错误信息能明确两个核心问题:
- 路径分隔符混用:Windows系统默认使用反斜杠
\,但代码中将带反斜杠的root路径与文件名用/拼接,生成的路径同时包含两种分隔符,导致操作系统无法识别,因此os.path.exists(original_file_path)返回False。 - 重复执行重命名:代码里连续调用了两次
os.rename,第一次已经完成文件重命名,第二次调用时原文件已不存在,直接触发找不到文件的错误。
修复方案
- 用
os.path.join构造路径:该方法会自动根据操作系统选择正确的路径分隔符,彻底避免分隔符混用问题。 - 移除重复的
os.rename调用:仅保留一次重命名操作即可。 - 可选:规范化路径:用
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
相关产品推荐
相关产品推荐

