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

Snakemake中能否设置可空wildcard并通过规则名生成无后缀输出?

解决Snakemake可空Wildcard与直接调用规则的问题

你当前的规则写法没法直接调用rule a生成output.png,因为{kw,.*}是正则捕获型wildcard,要求必须匹配到内容(比如output_abc.png里的_abc),没法对应空值的情况。要实现「直接调用规则名时wildcard自动为空,生成output.png」,可以用以下两种方法:

方法一:使用可选Wildcard(推荐,Snakemake 5.1+支持)

Snakemake支持用{kw?}表示可选wildcard,为空时输出文件名就是output.png。修改后的规则如下:

rule a:
    input: "csv.file"
    output: "output{kw?}.png"
    params:
        kwargs = lambda wc: f'--{wc.kw.strip("_")}' if wc.kw and wc.kw.strip("_") else ""
    shell: "example.py {input} {output} {params.kwargs}"
  • 直接运行snakemake a,kw会自动设为空,生成output.png
  • 如果要生成带后缀的文件(比如output_foo.png),可以运行snakemake output_foo.png,或者指定wildcard:snakemake a --wildcards kw=_foo

方法二:设置默认Wildcard值

如果你的Snakemake版本较低,不支持可选wildcard,可以给规则添加default_wildcards参数,指定kw的默认值为空:

rule a:
    input: "csv.file"
    output: "output{kw}.png"
    default_wildcards:
        kw = ""
    params:
        kwargs = lambda wc: f'--{wc.kw.strip("_")}' if wc.kw.strip("_") else ""
    shell: "example.py {input} {output} {params.kwargs}"

直接运行snakemake a时,会使用默认的空kw,生成output.png;需要带后缀时同样可以指定wildcard值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:35:26