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

用于迭代有限同级子目录中的文件的 Python 包?

如何解决用于迭代有限同级子目录中的文件的 Python 包?

假设我们有一个如下所示的文件夹结构:

root/a/1.txt
root/a/2.txt
root/a/3.json
root/b/1.txt
root/b/2.txt
root/b/3.json
root/c/1.txt
root/c/2.txt

我想迭代一些特殊子目录(不是全部)中的文件。例如,获取子目录 .txta 中的所有 b 文件

当然,我们可以通过python中的for循环和os.listdir()/glob.glob()轻松实现。但我正在寻找一个unix shell ls 一样简单的 python 包(如果存在)。

ls ./root/{a,b}/*.txt

# output:
# root/a/1.txt
# root/a/2.txt
# root/b/1.txt
# root/b/2.txt

有人知道这样的python包吗?

解决方法

从技术上讲,您可以在该示例中使用 glob,因为 ab 是单个字符。

>>> glob.glob('./root/[ab]/*.txt')
['./root/a/1.txt','./root/a/2.txt','./root/b/1.txt','./root/b/2.txt']

否则你需要多个 glob 调用(你可以为其创建一个函数)

glob('./root/dir1/*.txt') + glob('./root/dir1/*.txt')

但是,您要问的是 {a,b},它是“shell 大括号扩展”,而不是 glob 语法的一部分。

请参阅 https://pypi.org/project/wcmatch/ 了解更多信息。

,

正如上面@Karl Thornton 所说,wcmatch 包完全可以满足需求。

请在此处提供更多详细信息。

# pip install wcmatch
>>> from wcmatch import glob as wcglob
>>> wcglob.glob('./root/{a,b}/*.txt',flags=wcglob.BRACE)

wcmatch 为带有 glob 标志的 BRACE 启用 Bash 样式大括号扩展

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