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

Python使用glob.glob遍历目录无法获取.gitignore文件问题

问题原因

你遇到的.gitignore遍历缺失和glob的默认匹配规则直接相关,和文件创建逻辑无关:

  • 你用open(".gitignore","w+").close()创建空.gitignore文件的代码完全可以正常执行,文件确实会被生成,之前误以为创建失败,本质是操作系统默认隐藏以.开头的文件/文件夹,glob默认也遵循这个规则,不会主动匹配这类隐藏条目。
  • 你写的glob.glob(classify_folder_name + '/**', recursive=True)逻辑里,**通配符默认不会匹配任何路径层级下以.开头的条目,所以.gitignore、.git目录、.env这类隐藏项都不会出现在返回结果里。
解决方案(不使用os.listdir())

根据你使用的Python版本,选对应方案即可:

方案1:Python 3.11及以上版本(最简便)

Python 3.11版本为glob.glob新增了include_hidden参数,直接开启该参数即可让递归匹配覆盖所有隐藏文件/目录:

import glob

classify_folder_name = "替换为你的目标目录实际路径"
rel_paths = glob.glob(
    classify_folder_name + '/**',
    recursive=True,
    include_hidden=True  # 开启隐藏文件匹配
)

for local_file in rel_paths:
    print(local_file)

方案2:兼容Python 3.11以下版本

低版本glob没有include_hidden参数,可以通过追加隐藏文件匹配模式、合并去重的方式实现同等效果:

import glob

classify_folder_name = "替换为你的目标目录实际路径"
# 分别匹配普通条目、所有层级下的隐藏条目
normal_paths = glob.glob(classify_folder_name + '/**', recursive=True)
hidden_paths = glob.glob(classify_folder_name + '/**/.*', recursive=True)
# 合并结果并去重
rel_paths = list(set(normal_paths + hidden_paths))

for local_file in rel_paths:
    print(local_file)

注意:该写法不会返回.(当前目录)、..(上级目录)两个特殊路径项,无需额外过滤;如果需要保留路径排序,可以对最终的rel_paths做排序处理后再遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 13:42:28