在snakemake中没有给出通配符错误的值

时间:2017-06-22 14:25:00

标签: python snakemake

我正在尝试使用snakemake创建一个简单的管道,从Web下载两个文件,然后将它们合并为一个输出。

我认为可行的是以下代码:

df_tweets.columns = ("tweetid", "sent")

此代码返回错误: dwn_lnks = { '1': 'https://molb7621.github.io/workshop/_downloads/sample.fa', '2': 'https://molb7621.github.io/workshop/_downloads/sample.fa' } import os # association between chromosomes and their links def chromo2link(wildcards): return dwn_lnks[wildcards.chromo] rule all: input: os.path.join('genome_dir', 'human_en37_sm.fa') rule download: output: expand(os.path.join('chr_dir', '{chromo}')), params: link=chromo2link, shell: "wget {params.link} -O {output}" rule merger: input: expand(os.path.join('chr_dir', "{chromo}"), chromo=dwn_lnks.keys()) output: os.path.join('genome_dir', 'human_en37_sm.fa') run: txt = open({output}, 'a+') with open (os.path.join('chr_dir', "{chromo}") as file: line = file.readline() while line: txt.write(line) line = file.readline() txt.close()

此外,在合并规则中,运行中的python代码不起作用。

snakemake软件包中的教程没有足够的示例来学习非计算机科学家的详细信息。如果有人知道学习如何使用snakemake的好资源,我将不胜感激,如果他可以分享。

1 个答案:

答案 0 :(得分:3)

问题是您在规则expand的输出中有download函数,该函数未定义通配符{chromo}的值。我想你真正想要的是

rule download:
output:
    'chr_dir/{chromo}',
params:
    link=chromo2link,
shell:
    "wget {params.link} -o {output}"

没有expand。只需汇总通过通配符expand功能,就像您在规则merger中执行此操作一样。

另请参阅官方的Snakemake教程,该教程详细解释了这一点。