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

问题描述 投票:0回答:1

我有一个简单的功能,可以读取一个文件(一行)并在拆分后获取第一个元素。

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=(($7+addon)/($8+addon))*(inp/cdna1);print $0,ratio}}' {input} > {output}
'''

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

但是Snakemake不能使用通配符获取路径,因此它试图使用通配符获取路径,并且显然不起作用。

[Errno 2] No such file or directory: 'data/wc_bed/cdna/{cdna}.wc.txt'
python wildcard snakemake
1个回答
0
投票

我认为使用像这样的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

© www.soinside.com 2019 - 2024. All rights reserved.