目前,我正在使用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_b720
和art_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(^表示字符串的开头(开头的字符,然后有一个斜杠,然后至少有一个非斜杠字符,如果有很多,然后是斜杠,然后是一个目录名或另一个,然后是任何字符(.*(,最后是$