Python 2中如何用glob()递归查找路径?(解决recursive参数报错)
问题复现
用户原本用于递归查找目录下所有txt文件的Python3代码如下:
import glob glob.glob('**/*.txt', recursive=True)
Python3环境下正常输出结果:
['2.txt', 'sub/3.txt']
将相同代码放到Python2环境运行时,触发报错:
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: glob() got an unexpected keyword argument 'recursive'
核心结论
Python 2 版本的glob模块确实不支持recursive参数——该参数是Python 3.5才正式加入的能力,Python2时代的glob接口本身没有定义这个形参,传入时自然会抛出“收到不支持的关键字参数”的类型错误。
Python2环境下的替代实现方案
方案1:使用原生
os.walk遍历实现(无第三方依赖,兼容所有Python2版本)
利用Python2自带的os.walk接口递归遍历目录,匹配目标后缀的文件,拼接成和Python3 glob输出格式一致的相对路径,示例代码:import os def get_all_txt_files(search_root='.'): matched_files = [] # 递归遍历根目录下所有层级的子目录 for current_dir, _, file_list in os.walk(search_root): for file_name in file_list: # 匹配目标文件后缀 if file_name.endswith('.txt'): # 计算相对路径,和Python3 glob输出格式对齐 relative_path = os.path.relpath( os.path.join(current_dir, file_name), search_root ) matched_files.append(relative_path) return matched_files调用该函数的返回结果和Python3下原glob代码的输出完全一致,且在Windows、Linux、macOS下都能自动处理路径分隔符,无跨平台兼容问题。
方案2:使用第三方兼容库
glob2(低迁移成本,接口和Python3原生glob对齐)
通过pip安装glob2库后,可直接使用和Python3几乎完全一致的写法实现递归匹配,不需要额外修改业务逻辑:# 安装命令:pip install glob2 import glob2 # 直接支持**通配符的递归匹配,不需要传recursive参数 result = glob2.glob('**/*.txt')该方案适合不想改动原有遍历逻辑、希望尽量复用Python3代码写法的场景。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

