gpt4 book ai didi

python - 在 Snakemake 中处理等效的文件扩展名

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

本质上,我想知道在 snakemake 中处理等效文件扩展名的推荐方法是什么。例如,假设我有一个规则来计算 fasta 文件中的条目数。该规则可能类似于....

rule count_entries:
input:
["{some}.fasta"]
output:
["{some}.entry_count"]
shell:
'grep -c ">" {input[0]} > {output[0]}'

这很好用。但是,如果我希望此规则也允许“{some}.fa”作为输入怎么办?

有什么干净的方法可以做到这一点吗?

编辑:

这是我对第一个提议的解决方案的最佳猜测。这可能会变成更通用的高阶函数,但这是我理解的基本思想。我不认为这个想法真的适合任何一般用例,因为它在“构建 DAG”阶段不与其他规则合作。

import os

def handle_ext(wcs):
base = wcs["base"]
for file_ext in [".fasta", ".fa"]:
if(os.path.exists(base + file_ext)):
return [base + file_ext]

rule count_entries:
input:
handle_ext
output:
["{base}.entry_count"]
shell:
'grep -c ">" {input[0]} > {output[0]}'

EDIT2:这是我认为目前最好的解决方案......

count_entries_cmd = 'grep -c ">" {input} > {output}'
count_entries_output = "{some}.entry_count"

rule count_entries_fasta:
input:
"{some}.fasta"
output:
count_entries_output
shell:
count_entries_cmd

rule count_entries_fa:
input:
"{some}.fa"
output:
count_entries_output
shell:
count_entries_cmd

最佳答案

我注意到的一件事是您试图在输入和输出部分中指定文件列表,但实际上您的规则采用单个文件并生成另一个文件。我建议您为不同的扩展指定两个单独的规则的直接解决方案:

rule count_entries_fasta:
input:
"{some}.fasta"
output:
"{some}.entry_count"
shell:
'grep -c ">" {input} > {output}'

rule count_entries_fa:
input:
"{some}.fa"
output:
"{some}.entry_count"
shell:
'grep -c ">" {input} > {output}'

除非您将具有相同 {some} 名称和不同扩展名的文件保存在同一文件夹中(我希望您不要这样做),否则这些规则是明确的。

关于python - 在 Snakemake 中处理等效的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56370558/

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