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

使用os.walk()遍历根目录查找Excel文件的问题及解决方法

问题描述

我需要遍历包含多层嵌套子文件夹的根目录,找出所有Excel文件并用pandas做数据分析。最初尝试用os.path.splitext(filename)[1] == ".xlsx"判断文件类型,但添加计数器后结果为0(预期找到85个文件),原代码如下:

import os
import pandas as pd

rootFolderPath = r'.'

counter = 0

for root, dirs, files in os.walk(rootFolderPath):
    for filename in files:
        if os.path.isfile(os.path.splitext(filename)[1]) == ".xlsx":
            xlsx = pd.ExcelFile(filename)
            counter += 1

print(counter)
原代码错误分析

核心问题出在判断条件os.path.isfile(os.path.splitext(filename)[1]) == ".xlsx":

  • os.path.splitext(filename)[1]返回的是文件后缀(比如.xlsx),是字符串而非文件路径
  • os.path.isfile()需要传入合法路径来判断是否为文件,传入后缀字符串会直接返回False,导致条件永远不成立,计数器始终为0
优化后的解决方案

针对三个核心需求做了优化:

  • 兼容.xlsx和.xlsm两种Excel文件后缀
  • 过滤带~前缀的Excel临时文件
  • 正确拼接文件完整路径,避免pandas找不到文件

优化代码如下:

import os
import pandas as pd

rootFolderPath = r'.'
valid_extensions = ('.xlsx', '.xlsm')
counter = 0

for root, dirs, files in os.walk(rootFolderPath):
    for filename in files:
        # 过滤临时文件 + 判断合法后缀
        if not filename.startswith('~') and filename.endswith(valid_extensions):
            # 跨平台拼接完整文件路径
            full_file_path = os.path.join(root, filename)
            xlsx = pd.ExcelFile(full_file_path)
            counter += 1

print(f"找到有效Excel文件数量:{counter}")
代码说明
  • filename.endswith(valid_extensions):一次性匹配多种合法后缀,比手动截取字符串更简洁可靠
  • filename.startswith('~'):直接过滤Excel生成的临时文件,逻辑清晰
  • os.path.join(root, filename):跨平台拼接路径,避免手动用\拼接带来的兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:30:45