我试图根据输入目录定义通配符。目前,我的解决方案如下所示:
files = glob_wildcards("input/{organism}/{gene}/{sequence}.txt")
但是,我注意到
input/
目录可能包含以.
或._
开头的隐藏文件或子文件夹。我想在定义通配符时排除它们。
我在文档中遇到了
constraining wildcards
的概念,但我不确定如何将它们应用到我的情况中。我尝试使用它们,但通配符返回空。
(正则表达式:匹配不以
.
开头)
files = glob_wildcards("input/{organism,[^.]+}/{gene,[^.]+}/{sequence,[^.]+}.txt")
files:
Wildcards(organism=[], gene=[], sequence=[])
编辑 我不使用正则表达式时的示例输出:
files:
Wildcards(organism=['organism', 'organism'],
gene=['gene', 'gene'],
sequence=['._gene-pseudo_V:123..456__organims__gene', 'gene-pseudo_V:123..456__organims__gene']
您已经很接近了,但是您使用的正则表达式不正确: 而不是例如
{gene,[^.]+}
您要为所有通配符写入 {gene,^[^\.].+}
,这些通配符应该排除以 .
开头的文件(隐藏文件):
files = glob_wildcards("input/{organism,^[^\.].+}/{gene,^[^\.].+}/{sequence,^[^\.].+}.txt")
对于正则表达式
.
匹配任何不是换行符的字符,因此您需要对其进行转义 \.
以便在字符类否定 [^\.]
中使用它。前导 ^
可以省略,并确保匹配是文件路径字符串的开头。