问题描述
我使用 python pathlib Path.glob('**')
递归获取主目录和所有子目录。但我不想要隐藏目录。我的代码看起来像这样
from pathlib import Path
p = Path(a_path)
p.glob('**')
我想要的可以通过glob
这样实现
glob.glob(os.path.join(a_path,'**/'),recursive=True)
但我很好奇如何用pathlib
解决方法
pathlib
的 glob
版本不会过滤隐藏的文件和目录,因此您必须自己检查它们。由于它返回所有条目,因此您必须分别检查每个部分(路径组件):
[path for path in p.glob('**') if not any(part.startswith('.') for part in path.parts)]
这有几个问题:对于大型隐藏目录来说效率低下,因为你不能一次删除它们,你必须过滤掉它们的每个子文件夹。如果您的起始文件夹的任何部分被隐藏,它也不会起作用,除非您在 if
检查中将其切断。
另一种方法是使用 os.walk()
,它允许您在下降发生时修改下降,如 this answer 中所述。
这一切都假设您使用的是 *nix,其中隐藏状态通过在名称前添加一个点来表示。在 Windows 上,您可能不得不求助于 attrib
等外部工具。