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

Snakemake在python函数的路径中使用通配符,python,wildcard,snakemake,Python,Wildcard,Snakemake,我有一个简单的函数,可以读取一个文件(一行)并在拆分后获取第一个元素 def get_wc(wc): file = open(wc,"r") normalization_value = file.readline().split(' ')[0] return(normalization_value) 我在规则陷阱中使用此函数 rule compute_fc: input: "data/annotated_clones/{cdna}_paste_{lib}.ann

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

def get_wc(wc):
    file = open(wc,"r")
    normalization_value = file.readline().split(' ')[0]
    return(normalization_value)
我在规则陷阱中使用此函数

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'

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

查看文档。

我认为使用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")

查看文档。

您希望此代码打开什么文件?因为显然名为
data/wc_bed/cdna/{cdna}.wc.txt
的文件不存在,正如错误消息所说……您熟悉snakemake吗?我的函数获取一个路径,然后打开一个文件并返回一个值。很简单。在snakemake中,您可以使用通配符:例如{cdna}。这类似于:data/wc_bed/cdna/*.wc.txt,但您可以为您的cdna赋予价值。问题是,我不知道snakemake如何在输入函数的路径中使用通配符。您希望该代码打开哪个文件?因为显然名为
data/wc_bed/cdna/{cdna}.wc.txt
的文件不存在,正如错误消息所说……您熟悉snakemake吗?我的函数获取一个路径,然后打开一个文件并返回一个值。很简单。在snakemake中,您可以使用通配符:例如{cdna}。这类似于:data/wc_bed/cdna/*.wc.txt,但您可以为您的cdna赋予价值。问题是我不知道snakemake如何在输入函数的路径中使用通配符