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
相关产品推荐
相关产品推荐

