微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 Pathlib glob('**')

如何解决如何从 Pathlib glob('**')

我使用 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

达到同样的效果

解决方法

pathlibglob 版本不会过滤隐藏的文件和目录,因此您必须自己检查它们。由于它返回所有条目,因此您必须分别检查每个部分(路径组件):

[path for path in p.glob('**') if not any(part.startswith('.') for part in path.parts)]

这有几个问题:对于大型隐藏目录来说效率低下,因为你不能一次删除它们,你必须过滤掉它们的每个子文件夹。如果您的起始文件夹的任何部分被隐藏,它也不会起作用,除非您在 if 检查中将其切断。

另一种方法是使用 os.walk(),它允许您在下降发生时修改下降,如 this answer 中所述。

这一切都假设您使用的是 *nix,其中隐藏状态通过在名称前添加一个点来表示。在 Windows 上,您可能不得不求助于 attrib 等外部工具。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。