Python 用于在有限的同级子目录中迭代文件的包?
Python packages for iterating files in limited sibling subdirectories?
假设我们有如下文件夹结构:
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
而且我想在一些特殊的子目录(不是全部)中迭代文件。例如获取子目录a
和b
.
下所有.txt
个文件
当然,我们可以通过for
循环和python中的os.listdir()/glob.glob()
轻松实现。但我正在寻找一个 python 包(如果存在),其行为与 unix shell ls
.
一样简单
ls ./root/{a,b}/*.txt
# output:
# root/a/1.txt
# root/a/2.txt
# root/b/1.txt
# root/b/2.txt
有人知道这样的 python 包吗?
从技术上讲,您可以在该示例中使用 glob,因为 a
和 b
是单个字符。
>>> 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
为带有标志 BRACE
的 glob
启用 Bash 样式大括号扩展
假设我们有如下文件夹结构:
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
而且我想在一些特殊的子目录(不是全部)中迭代文件。例如获取子目录a
和b
.
.txt
个文件
当然,我们可以通过for
循环和python中的os.listdir()/glob.glob()
轻松实现。但我正在寻找一个 python 包(如果存在),其行为与 unix shell ls
.
ls ./root/{a,b}/*.txt
# output:
# root/a/1.txt
# root/a/2.txt
# root/b/1.txt
# root/b/2.txt
有人知道这样的 python 包吗?
从技术上讲,您可以在该示例中使用 glob,因为 a
和 b
是单个字符。
>>> 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
为带有标志 BRACE
glob
启用 Bash 样式大括号扩展