Snakemake工作流报错:tuple index out of range 求助
问题排查与解决
错误根源
- SAMPLES变量处理不当:将样本列表转为空格分隔字符串再拆分,易引入空字符串(如文件末尾换行),导致
expand生成无效的通配符匹配项,触发索引越界。 - FastQC输入/输出通配符匹配错误:
- 输入使用
*.fastq通配符,FastQC wrapper需要明确的输入文件路径,且配对端文件未区分,Snakemake无法正确解析依赖关系。 - 输出文件命名不符合FastQC实际生成的格式(FastQC会输出
{sample}_{pair}_fastqc.html/zip,而非{sample}*.html),导致规则间依赖匹配失败。
- 输入使用
修正后的完整代码
# 正确读取样本列表,过滤空行 with open("./input/SRR_Acc_List.txt") as f: SAMPLES = [line.rstrip() for line in f if line.strip()] # 定义配对端后缀 PAIRED = ["1", "2"] rule all: input: # 展开所有配对端的FastQC输出文件 expand("qc/pretrim_fastqc/{sample}_{pair}_fastqc.html", sample=SAMPLES, pair=PAIRED), expand("qc/pretrim_fastqc/{sample}_{pair}_fastqc.zip", sample=SAMPLES, pair=PAIRED), "plots/quals.svg" # Step 1: Pre-trim Quality Check rule pretrim_fastqc: input: # 明确配对端输入文件 "./input/{sample}_{pair}.fastq" output: # 匹配FastQC实际生成的输出文件名 html="qc/pretrim_fastqc/{sample}_{pair}_fastqc.html", zip="qc/pretrim_fastqc/{sample}_{pair}_fastqc.zip" params: "--quiet" log: "logs/pretrim_fastqc/{sample}_{pair}.log" threads: 1 wrapper: "v1.25.0/bio/fastqc"
关键修改说明
- 样本列表读取:直接保留列表格式,添加空行过滤,避免引入无效的空字符串元素。
- 配对端处理:新增
PAIRED变量区分双端文件,让Snakemake能为每个样本的两个配对端分别生成FastQC任务。 - 输入/输出路径:替换模糊的
*通配符为明确的配对端后缀,确保Snakemake能准确匹配输入输出文件,建立正确的依赖关系。 - rule all调整:同步更新
expand的参数,覆盖所有配对端的输出文件,确保工作流能完整触发所有任务。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

