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

如何使用glob模块的glob函数递归获取目录及所有子目录中的PDF文件

如何使用glob模块的glob函数递归获取目录及所有子目录中的PDF文件

我来帮你搞定这个问题!你之前的尝试其实已经摸到门道了,只是还差个关键的小细节——要把recursive=True参数和**通配符搭配使用,才能实现递归遍历所有层级的目录。

先给你直接上正确的代码,再慢慢解释:

from glob import glob

# 这个写法会匹配D盘根目录下的所有PDF,以及所有嵌套子目录里的PDF
pdf_files = glob('D:/**/*.pdf', recursive=True)

为什么你之前的写法不行?

咱们逐个分析你试过的代码:

  • glob('D:/*.pdf'):这个模式只匹配D盘根目录下的PDF文件,完全不会遍历子目录,所以看不到深层的文件;
  • glob('D:/*/*.pdf'):这个模式只能匹配一级子目录里的PDF(比如D:\Documents下的),但根目录的文件和更深的子目录(比如D:\Documents\January)里的文件都找不到;
  • glob('D:/*.pdf', recursive=True):这里虽然加了recursive=True,但模式里没有**通配符,这个参数根本发挥不了作用,所以还是只找根目录的文件。

关键知识点:**通配符的作用

当你开启recursive=True时,**会匹配任意数量的子目录(包括零个)——也就是说,它既会匹配当前目录(根目录),也会匹配所有嵌套的子目录。所以D:/**/*.pdf就等价于同时查找:

  • D:/*.pdf(根目录)
  • D:/*/*.pdf(一级子目录)
  • D:/*/*/*.pdf(二级子目录)
  • 以此类推,直到所有嵌套层级的子目录

更稳妥的写法(推荐)

如果担心手动写路径分隔符出错,或者需要跨平台兼容,可以结合os.path模块来拼接路径:

import os
from glob import glob

# 定义要搜索的根目录
root_dir = 'D:\\Documents\\'
# 用os.path.join自动处理路径分隔符
search_pattern = os.path.join(root_dir, '**', '*.pdf')
pdf_files = glob(search_pattern, recursive=True)

这样不管是Windows还是Linux/macOS,路径分隔符都会自动适配,不容易出错。

备注:内容来源于stack exchange,提问作者libo navon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:49:51