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

Python中glob模块使用方法及返回空列表问题咨询

Python glob模块使用指南 & 空结果问题排查

我来帮你梳理下glob模块的基础用法,以及你遇到的返回空列表问题的排查方向~

一、glob模块基础用法

glob是Python专门用来查找符合特定规则的文件路径的工具,用法很直观:

  1. 两种导入与调用方式

    # 方式1:导入整个模块,调用glob.glob()
    import glob
    files = glob.glob("path/to/files/*.txt")
    
    # 方式2:直接导入glob函数,直接调用
    from glob import glob
    files = glob("path/to/files/*.txt")
    
  2. 常用匹配模式

    • *.txt:匹配当前目录下所有后缀为txt的文件
    • *.{txt,py}:匹配当前目录下后缀为txt或py的文件
    • data/*/*.csv:匹配data目录下一级子目录里的所有csv文件
    • data/**/*.csv:匹配data目录及其所有子目录里的csv文件(注意:必须加recursive=True参数才会生效)
    # 递归查找所有子目录的csv文件示例
    files = glob("data/**/*.csv", recursive=True)
    

二、你的空结果问题排查与修复

你提到在def read(self, folders)方法里执行files = glob(folders)返回空列表,大概率是以下几个原因,你可以逐一排查:

1. 路径缺少通配符

如果folders是单纯的文件夹路径(比如"/home/user/my_data"),glob会尝试寻找名字完全等于该路径的文件,而不是文件夹里的内容。这时候需要给路径加上通配符:

# 匹配文件夹下所有文件
files = glob(f"{folders}/*")
# 匹配文件夹下所有txt文件
files = glob(f"{folders}/*.txt")
# 递归匹配文件夹及其子目录下的所有文件
files = glob(f"{folders}/**/*", recursive=True)

2. 相对路径与当前工作目录不匹配

如果folders是相对路径(比如"./data"),要确保脚本运行时的当前工作目录和这个相对路径对应。你可以先打印当前目录确认:

import os
print(os.getcwd())  # 输出脚本当前运行的目录

如果目录不对,要么把folders改成绝对路径,要么在脚本开头切换工作目录:

os.chdir("/path/to/correct/directory")

3. 用了**递归但没加recursive=True

如果你用**来递归查找子目录,但没传recursive=True参数,glob会把**当成普通字符处理,自然找不到文件:

# 错误用法:不会递归查找
files = glob("data/**/*.txt")
# 正确用法
files = glob("data/**/*.txt", recursive=True)

4. 路径不存在或无访问权限

先检查folders对应的路径是否真实存在,以及当前用户有没有读取权限:

import os
print(os.path.exists(folders))  # 输出True表示路径存在
print(os.access(folders, os.R_OK))  # 输出True表示有读取权限

5. 文件名大小写不匹配(非Windows系统)

在Linux/macOS系统中,文件名区分大小写,比如你用*.TXT但实际文件是*.txt,就会匹配失败,要确保通配符的大小写和文件名一致。

示例修复代码

假设你的folders是要遍历的文件夹路径,修改后的read方法可以参考:

from glob import glob
import os

class YourClass:
    def read(self, folders):
        # 先校验路径是否存在
        if not os.path.exists(folders):
            print(f"路径 {folders} 不存在!")
            return []
        # 递归查找所有文件,可根据需求修改通配符
        files = glob(f"{folders}/**/*", recursive=True)
        # 过滤掉文件夹,只保留文件
        files = [f for f in files if os.path.isfile(f)]
        return files

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:17:48