gpt4 book ai didi

python - snakemake 中的“没有为通配符错误给出值”

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:25 26 4
gpt4 key购买 nike

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

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

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()

此代码返回错误:没有为通配符“chromo”提供值。在第 20 行

另外,在合并规则中,run 中的 python 代码不起作用。

snakemake 包中的教程没有涵盖足够的示例,无法让非计算机科学家了解详细信息。如果有人知道学习如何使用 snakemake 的好资源,如果他们可以分享,我将不胜感激 :)。

最佳答案

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

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

没有展开expand 函数只需要通过通配符进行聚合,就像您在规则 merger 中所做的那样。

另请参阅官方的 Snakemake 教程,其中对此进行了详细解释。

关于python - snakemake 中的“没有为通配符错误给出值”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44702238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com