You need to enable JavaScript to run this app. Python 2中如何用glob()递归查找路径?(解决recursive参数报错)
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 19:06:08