Snakemake使用fasterq-dump wrapper报Wildcards无accession属性错误
报错原因
核心触发点是fasterq-dump wrapper对通配符命名有强制要求:SRA登录号对应的通配符必须命名为accession。你编写规则时将该位置的通配符自定义为sample,wrapper内部执行时读取不到wildcards.accession字段,直接触发AttributeError。你在规则output部分的注释已经标注了这个命名要求,但实际代码未做对应匹配。
修复方法
- 统一修改规则中所有SRA登录号对应的通配符名,将
{sample}替换为{accession},覆盖rule all的输入路径、下载规则的输出路径、日志路径三个位置,同时同步修改expand函数的参数名。
修改后的正确Snakefile示例:
# read a .txt file including many SRR* accession number import pandas as pd df = pd.read_csv('SraRunTable.txt', sep=',', header=0) # append all accession number to a list SAMPLES = [] for i in df['Run']: SAMPLES.append(i) # snakemake workflow starts here rule all: input: expand("/data/fastq/{accession}_1.fastq.gz", accession=SAMPLES) rule get_fastq_pe_gz: output: "/data/fastq/{accession}_1.fastq.gz", "/data/fastq/{accession}_2.fastq.gz", log: "/data/logs/{accession}.log" params: extra="--skip-technical" threads: 20 wrapper: "v1.7.0/bio/sra-tools/fasterq-dump"
- 清理之前失败任务的缓存:执行命令前先删除
.snakemake目录下对应失败任务的临时文件,或者直接运行snakemake -s fasterq-dump.snake --cores 20 --use-conda --cleanup-metadata SRR8750458清理单个失败任务的元数据,再重新执行原运行命令即可。
如果你不想修改现有通配符命名,也可以在下载规则的params字段中显式指定accession的取值映射,添加一行accession=lambda wildcards: wildcards.sample即可适配原有命名,但直接修改通配符名是兼容性最高、最不易触发其他隐藏问题的方案。
内容的提问来源于stack exchange,提问作者Yao-Chung
相关产品推荐
相关产品推荐

