我使用 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
达到相同的效果
最佳答案
glob
的 pathlib
版本不会过滤隐藏文件和目录,因此您必须自己检查它们。由于它返回所有条目,因此您必须单独检查每个部分(路径组件):
[path for path in p.glob('**') if not any(part.startswith('.') for part in path.parts)]
这有几个问题:对于大型隐藏目录来说效率低下,因为你不能只删除它们一次,你必须过滤掉它们的每个子文件夹。如果起始文件夹的任何部分被隐藏,它也将不起作用,除非您在 if
检查中将其切断。
另一种方法是使用 os.walk()
,它允许您在下降发生时修改下降,如 this answer 中所述。 .
这一切都假设您使用的是 *nix,其中隐藏状态通过在名称前面添加一个点来指示。在 Windows 上,您可能必须求助于 attrib
等外部工具。
关于python-3.x - 如何从 Pathlib glob ('**' 中排除隐藏目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68250281/