Snakemake 在 python 函数的路径中使用通配符

Snakemake use wildcards in path of python function

我有一个读取文件(一行)并在拆分后获取第一个元素的简单函数。

def get_wc(wc):
    file = open(wc,"r")
    normalization_value = file.readline().split(' ')[0]
    return(normalization_value)

我在规则snakemake中使用这个函数。

rule compute_fc:
input:
    "data/annotated_clones/{cdna}_paste_{lib}.annotated.bed"
output:
    "data/fold_change/{cdna}_paste_{lib}.fc.bed"
params:
    size_cdna=get_wc("data/wc_bed/cdna/{cdna}.wc.txt"),
    size_lib=get_wc("data/wc_bed/library/{lib}.wc.txt")
shell:'''
    awk -v cdna1={params.size_cdna} -v inp={params.size_lib} -v addon=1 -v FS='\t' -v OFS='\t' '/^chr/{{ratio=((+addon)/(+addon))*(inp/cdna1);print [=12=],ratio}}' {input} > {output}
'''

我正在尝试获取 get_wc 函数 return 的值并将其用作 snakemake 规则中的参数。

但是 Snakemake 没有获取带通配符的路径,所以它尝试获取带通配符的路径,但显然它不起作用。

[Errno 2] No such file or directory: 'data/wc_bed/cdna/{cdna}.wc.txt'

我认为像这样使用 lambda 函数应该可行:

params:
    size_cdna = lambda wildcards: get_wc(f"data/wc_bed/cdna/{wildcards.cdna}.wc.txt")
    size_lib = lambda wildcards: get_wc(f"data/wc_bed/library/{wildcards.lib}.wc.txt")

查看 here 文档。