You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在定义glob_wildcards时排除隐藏文件(多输入场景)

用Snakemake通配符排除隐藏文件/文件夹

我正在用Snakemake的glob_wildcards定义输入目录的通配符,当前代码如下:

files = glob_wildcards("input/{organism}/{gene}/{sequence}.txt")

但input目录中存在以.或._开头的隐藏文件/子文件夹,希望在定义通配符时直接排除它们。

我尝试用正则表达式匹配不以.开头的内容来约束通配符,却得到了空的通配符结果:

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__organism__gene', 'gene-pseudo_V:123..456__organism__gene']

问题原因

你用的正则[^.]+要求匹配完全不包含.的字符串,但你的有效文件名(比如示例中的gene-pseudo_V:123..456__organism__gene)里包含.,所以这个正则会把有效文件也排除,导致结果为空。你真正需要的是匹配不以.开头的字符串,而非完全不含.的字符串。

解决方案

修改正则约束,使用[^.].*来匹配「第一个字符不是.,后续可以是任意字符(包括.)」的内容:

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

这个正则会:

  • 排除所有以.开头的organism子文件夹
  • 排除所有以.开头的gene子文件夹
  • 排除所有以.开头的sequence文件名(包括._开头的)

如果需要确保通配符内容不为空,可以把.*改成.+,即[^.].+,这样要求至少有两个字符(第一个非.,后面至少一个字符)。

内容的提问来源于stack exchange,提问作者amk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:20:52