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

使用glob扫描CSV文件时指定子目录返回空列表问题

问题分析与解决

嘿,我一眼就瞅出你这个函数的问题所在啦!

为什么传入btcusd/路径会返回空列表?

你的scan_for_files函数逻辑有个小漏洞:
当你传入/data/realtimedata/trades/bitfinex/btcusd/时,os.walk(path)遍历的第一层里,dirs是这个目录下的子目录列表。如果btcusd/下面没有再嵌套子目录(.csv文件直接存在这个目录里),那dirs就是个空列表,中间的for d in dirs循环根本不会执行,自然找不到任何文件。

而当你传入/data/realtimedata/trades/bitfinex/时,dirs里包含btcusd这些子目录,所以循环能正常进入,进而找到子目录里的.csv文件。

另外,你的代码还有个冗余逻辑:os.walk本身就会遍历所有层级的目录,你手动嵌套循环处理dirs的操作,反而漏掉了当前目录下直接存放的文件。

两种可行的修复方案

方案一:简化os.walk的用法

直接遍历os.walk返回的所有文件,筛选出.csv后缀的即可:

import os

def scan_for_files(path):
    file_list = []
    # os.walk返回(root, dirs, files),我们不需要dirs可以用_占位
    for root, _, files in os.walk(path):
        for file in files:
            if file.endswith('.csv'):
                file_list.append(os.path.join(root, file))
    return file_list

方案二:用glob递归匹配(更简洁)

如果坚持想用glob,可以直接开启递归匹配模式,一行代码搞定:

import glob
import os

def scan_for_files(path):
    # **匹配所有子目录,recursive=True开启递归扫描
    return glob.glob(os.path.join(path, '**', '*.csv'), recursive=True)

这两种方式都能完美处理两种路径场景,不管目标目录下有没有子目录,都能把所有.csv文件找出来~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:46