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

Snakemake搭建Nanopore分析流程触发WildcardError错误解决问询

报错原因

你触发报错的核心原因是guppy_linkfastq规则的输入路径中包含{failpass}、{runid}两个未在输出路径中定义的通配符,Snakemake的通配符推导逻辑是从输出反向匹配输入的通配符取值,输出中不存在的通配符无法被自动赋值,因此抛出WildcardError。

你希望直接用glob匹配代替显式通配符的思路是可行的,但不能直接在input字段写glob语句,因为Snakemake解析Snakefile时就会执行glob,此时上游guppy碱基识别任务还未运行,目标文件不存在,匹配会为空。

解决方案

推荐使用输入函数动态匹配已生成的fastq文件,无需声明多余通配符,也能保证匹配时机正确:

  1. 首先在Snakefile中定义输入函数,用于匹配对应样本下所有guppy输出的fastq.gz文件:
import glob

def get_guppy_fastq(wildcards):
    # 匹配sample对应目录下所有层级的fastq.gz文件
    # 如果只需要保留质检通过的reads,可将路径改为 f"basecall/{wildcards.sample}/pass/*.fastq.gz"
    return glob.glob(f"basecall/{wildcards.sample}/**/*.fastq.gz", recursive=True)
  1. 修改guppy_linkfastq规则如下:
rule guppy_linkfastq:
    input:
        get_guppy_fastq
    output:
        "basecall/{sample}.fastq.gz"
    shell:
        # 多文件合并为单个文件,适配后续分析流程;如果不需要合并仅做软链接,可调整shell命令逻辑
        "cat {input} > {output}"
补充说明
  • 不推荐给failpass、{runid}加通配符约束的方案,该方法虽然能解决报错,但如果匹配到多个文件时Snakemake会随机选择,极易出现非预期结果。
  • 如果确实需要保留软链接而非合并文件,可调整shell逻辑:先创建专属目录存放所有软链接,再将目录下的fastq.gz链接到目标路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:12:01