将搜索限制为GlobPython中的特定子文件夹



目前,我正在使用glob来梳理嵌套文件夹,以提取带有文件raw.txt的文件夹,如下所示。

from glob import glob
droot='/mnt/d/mdir/hus/'
apath=glob(f"{droot}/*/*/*/raw.txt")

CCD_ 3输出如下

['/mnt/d/mdir/hus/MOI/abc_123/t1/raw.txt',
'/mnt/d/mdir/hus/MOI/abc_123 /t3/raw.txt',
'/mnt/d/mdir/hus/MOI/Khai_b720 /t1/raw.txt',
'/mnt/d/mdir/hus/MOI/Khai_b720/t3/raw.txt',
'/mnt/d/mdir/hus/MOI/art_b730430/t1/raw.txt',
'/mnt/d/mdir/hus/MOI/art_b730430/t2/raw.txt']

比如说,我将把搜索限制在子文件夹的列表中

Khai_b720art_b730430

有没有一种方法可以直接在glob参数中设置。

也许像

apath=glob(f"{droot}/*/{Khai_b720,art_b730430}/*/raw.txt")

使得预期输出应为

['/mnt/d/mdir/hus/MOI/Khai_b720 /t1/raw.txt',
'/mnt/d/mdir/hus/MOI/Khai_b720/t3/raw.txt',
'/mnt/d/mdir/hus/MOI/art_b730430/t1/raw.txt',
'/mnt/d/mdir/hus/MOI/art_b730430/t2/raw.txt']

目前,我依赖以下

k=['Khai_b720','art_b730430']
pathb=[x for x in s if any(kk in x for kk in k) ]

好吧,我认为glob不可能,glob只支持*?和[ab][a-z][!a]一样的东西。有一个PR添加了这样的功能,但我认为它没有被添加,而且将被添加https://bugs.python.org/issue9584

您可以尝试用[]表示法实现它,但它也会匹配许多其他您不想要的文件名。另一种选择是在你的glob上使用regex进行过滤,比如

[x for x in glob(f"{droot}/*/*/*/raw.txt") if re.match(f'^{droot}/[^/]+/(Khai_b720|art_b730430)/.*$', x)]

在这里,我匹配所有以droot(^表示字符串的开头(开头的字符,然后有一个斜杠,然后至少有一个非斜杠字符,如果有很多,然后是斜杠,然后是一个目录名或另一个,然后是任何字符(.*(,最后是$

相关内容

  • 没有找到相关文章