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

Python给CSV添加上级目录名前缀:代码部分成功后触发文件未找到错误

给多级嵌套CSV文件添加上级文件夹前缀时的FileNotFoundError问题解决

需求说明

需要给嵌套在多级子文件夹中的CSV文件添加其顶层父文件夹(如Folder1、Folder2)作为文件名前缀,原目录结构与目标目录结构如下:

原目录结构

Folder1
    Apples
        Apples2
            Filename1.csv
    Oranges
        Oranges2
            Filenameb.csv
Folder2
    Blueberry
        Blueberry2
            Filename2.csv
    Oranges
        Oranges2
            Filenamec.csv

目标目录结构

Folder1
    Apples
        Apples2
            Folder1_Filename1.csv
    Oranges
        Oranges2
            Folder1_Filenameb.csv
Folder2
    Blueberry
        Blueberry2
            Folder2_Filename2.csv
    Oranges
        Oranges2
            Folder2_Filenamec.csv

遇到的问题

编写的代码仅成功重命名约5个文件后中断,触发FileNotFoundError:

FileNotFoundError: [WinError 2] The system cannot find the file specified:

原代码

import os.path
from pathlib import PurePath
pathway= r”path_to_directory”


for root,dirs,files  in os.walk(pathway)
    try:
        addition = PurePath(root).parts[-3]
        for file in files:
            if file.endswith(".csv"):
                newname =addition + '_' +  file
                #print(newname, os.path.join(root,newname))
                print(newname)
                os.rename(os.path.join(root,file),os.path.join(root,newname))
    except IndexError:
        pass

问题分析与修正

原代码存在的问题

  1. 语法错误:for root,dirs,files in os.walk(pathway)语句末尾缺少冒号,会导致代码无法正常执行
  2. 中文引号/转义错误:路径字符串使用了中文引号r”path_to_directory”,文件后缀判断用了转义的".csv",这些都会导致字符串解析异常,进而引发路径找不到的错误
  3. 层级索引不可靠:PurePath(root).parts[-3]依赖固定的目录层级索引,当os.walk遍历到不同深度的目录时,可能获取到错误的前缀,甚至触发IndexError(虽有捕获,但会导致不必要的跳过或错误处理)

修正后的代码

import os
from pathlib import Path

# 替换为你的实际目标目录,使用英文引号
pathway = r"path_to_directory"
base_path = Path(pathway)

# 递归查找所有CSV文件
for csv_file in base_path.rglob("*.csv"):
    # 获取文件相对于根目录的路径片段,第一个片段即为目标前缀(Folder1/Folder2)
    relative_parts = csv_file.relative_to(base_path).parts
    prefix = relative_parts[0]
    # 构造新文件名
    new_filename = f"{prefix}_{csv_file.name}"
    # 拼接新的文件路径
    new_file_path = csv_file.parent / new_filename
    # 执行重命名
    os.rename(csv_file, new_file_path)

修正点说明

  • 修复了语法错误,确保代码结构合法
  • 统一使用英文引号,避免字符串解析错误
  • 使用Path.rglob直接递归定位所有CSV文件,无需遍历无关目录
  • 通过relative_to获取相对路径,直接取第一个路径片段作为前缀,适配任意深度的子目录结构,避免固定索引的不可靠性
  • 利用Path对象的路径拼接特性,确保跨系统的路径兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:53:10