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

Snakemake中如何实现含通配符的字符串变量在expand函数内的正确展开?

Snakemake中如何实现含通配符的字符串变量在expand函数内的正确展开?

嗨,我完全懂你的烦恼!这种重复的超长字符串写起来又麻烦又容易出错,想把它抽成变量简化代码太合理了~你遇到的报错是因为Snakemake的expand()函数把你写的{prefix}当成了一个新的需要赋值的通配符,而不是你定义的那个变量里的内容。不过有两个简单的办法能解决这个问题:

方法一:用Python f-string提前拼接路径模板

先把你的prefix变量代入到完整的路径字符串里,再把这个拼接好的模板传给expand(),这样Snakemake就能正确识别里面的ngen、N这些真正的通配符了:

prefix = "test_nGen{ngen}_N{N}_S{S}_NR{NR}_DG{DG}_SS{SS}"
# 用f-string把prefix插入到路径模板中
full_template = f"sim_files/{prefix}/{prefix}.yaml"

rule all:
    input:
        expand(full_template, ngen=list_ngen, N=list_N, S=list_S, NR=list_NR, DG=list_DG, SS=list_SS)

方法二:直接用字符串拼接

如果你不习惯f-string,也可以用基础的字符串加法来拼接模板,效果是一样的:

prefix = "test_nGen{ngen}_N{N}_S{S}_NR{NR}_DG{DG}_SS{SS}"
full_template = "sim_files/" + prefix + "/" + prefix + ".yaml"

rule all:
    input:
        expand(full_template, ngen=list_ngen, N=list_N, S=list_S, NR=list_NR, DG=list_DG, SS=list_SS)

原理说明

这两种方法的核心都是先让Python处理你的prefix变量,把它的内容合并到路径模板里,等传给expand()的时候,它看到的是包含{ngen}、{N}这些目标通配符的完整字符串,而不是带有{prefix}的“嵌套通配符”,自然就不会报错啦~

备注:内容来源于stack exchange,提问作者Kiffikiffe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:04:30