Python中glob模块使用方法及返回空列表问题咨询
Python glob模块使用指南 & 空结果问题排查
我来帮你梳理下glob模块的基础用法,以及你遇到的返回空列表问题的排查方向~
一、glob模块基础用法
glob是Python专门用来查找符合特定规则的文件路径的工具,用法很直观:
两种导入与调用方式
# 方式1:导入整个模块,调用glob.glob() import glob files = glob.glob("path/to/files/*.txt") # 方式2:直接导入glob函数,直接调用 from glob import glob files = glob("path/to/files/*.txt")常用匹配模式
*.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
相关产品推荐
相关产品推荐

