从输入文件定义 glob_wildcards(多个)时如何避免隐藏文件

问题描述 投票:0回答:1

我试图根据输入目录定义通配符。目前,我的解决方案如下所示:

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']
wildcard snakemake
1个回答
0
投票

您已经很接近了,但是您使用的正则表达式不正确: 而不是例如

{gene,[^.]+}
您要为所有通配符写入
{gene,^[^\.].+}
,这些通配符应该排除以
.
开头的文件(隐藏文件):

files = glob_wildcards("input/{organism,^[^\.].+}/{gene,^[^\.].+}/{sequence,^[^\.].+}.txt")

对于正则表达式

.
匹配任何不是换行符的字符,因此您需要对其进行转义
\.
以便在字符类否定
[^\.]
中使用它。前导
^
可以省略,并确保匹配是文件路径字符串的开头。

© www.soinside.com 2019 - 2024. All rights reserved.