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

Python遍历子目录XLSX文件时出现FileNotFoundError的解决方法

问题解决:遍历主目录及指定子目录XLSX文件并筛选

问题背景

需要遍历当前目录及指定子目录(2015-2018)中的XLSX文件,筛选出包含"2014"工作表的文件。当前代码能处理主目录文件,但子目录文件打开时报错[Errno 2] No such file or directory: '文件名'。

错误原因

  • 第一段循环中,直接将子目录下的文件名追加到files列表,后续打开文件时仅传入文件名,程序会在当前工作目录下查找,而非文件实际所在的子目录,导致找不到文件。
  • 代码存在重复逻辑:既通过手动遍历指定子目录收集文件,又使用os.walk遍历,容易引发混乱。

修复后的代码

import os
import openpyxl

path = os.getcwd()
filtered_files_list = []

# 使用os.walk遍历指定子目录
for root, dirs, files in os.walk(path):
    # 仅处理目标子目录
    if os.path.basename(root) in ['2018', '2017', '2016', '2015']:
        for f in files:
            if f.endswith('.xlsx'):
                # 拼接文件完整路径
                full_file_path = os.path.join(root, f)
                try:
                    wb = openpyxl.load_workbook(full_file_path)
                    if "2014" in wb.sheetnames:
                        # 可选择保存完整路径或仅文件名,按需调整
                        filtered_files_list.append(full_file_path)
                        # 如果只需要文件名,用下面这行替换上面的:
                        # filtered_files_list.append(f)
                except Exception as e:
                    print(f"处理文件 {full_file_path} 时出错: {e}")

# 同时处理主目录下的XLSX文件
for f in os.listdir(path):
    full_file_path = os.path.join(path, f)
    if os.path.isfile(full_file_path) and f.endswith('.xlsx'):
        try:
            wb = openpyxl.load_workbook(full_file_path)
            if "2014" in wb.sheetnames:
                filtered_files_list.append(full_file_path)
                # 按需替换为文件名:filtered_files_list.append(f)
        except Exception as e:
            print(f"处理文件 {full_file_path} 时出错: {e}")

print(filtered_files_list)

关键修改点

  • 统一使用完整路径:打开文件时必须传入os.path.join(root, f)生成的完整路径,确保程序能定位到子目录中的文件。
  • 简化逻辑:去掉手动遍历子目录的重复代码,用os.walk统一处理指定子目录,同时单独处理主目录文件,逻辑更清晰。
  • 增加异常捕获:添加try-except块处理文件打开异常(如损坏的XLSX文件),避免程序中途崩溃。
  • 优化子目录判断:用os.path.basename(root) in 目标目录列表替代字符串后缀判断,更准确(避免出现类似xxx2018的目录被误判)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:20:41