Python Pathlib使用glob/rglob时如何跳过隐藏文件与目录
遍历跳过隐藏文件与目录的实现方法
要实现递归遍历过程中自动跳过所有隐藏资源,核心是识别路径上任意一级以.开头的节点——这类节点既包含直接命名的隐藏文件(比如.hidden_file)、隐藏目录(比如.hidden_dir),也包含隐藏目录下嵌套的所有文件。不需要额外做复杂的递归剪枝逻辑,判断过程开销极低,对常规目录规模来说完全没有性能影响,过滤准确率最高。
修改后的可运行代码
from pathlib import Path def check_hidden(p: Path) -> bool: # 逐层级校验路径组成,任意一段以.开头即为隐藏资源 return any(segment.startswith(".") for segment in p.parts) base_path = Path("/my/path") for path_item in base_path.rglob("*"): if check_hidden(path_item): continue # 按照示例的展示习惯,给目录追加/后缀方便直观区分 display_suffix = "/" if path_item.is_dir() else "" print(f"{path_item}{display_suffix}")
匹配测试目录的输出效果
针对题目给出的混合了隐藏资源的目录结构,运行后输出的资源集合完全符合预期:
- 根目录下的普通文件
file - 根目录下的普通目录
dir/ - 普通目录
dir内部嵌套的普通文件
所有以.开头的文件、目录,包括.hidden_dir内部嵌套的所有普通文件,都会被自动过滤,不会出现在输出结果里。
常见踩坑点:如果仅判断当前路径自身的文件名是否以
.开头,会漏过隐藏目录下嵌套的普通文件——比如藏在.hidden_dir里的file,自身名称没有.开头,但因为父目录是隐藏目录,按照需求应该整体跳过,这种写法就会把这类不该输出的资源打印出来。
内容的提问来源于stack exchange,提问作者Nico Schlömer
相关产品推荐
相关产品推荐

