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

Snakemake如何基于元数据表批量生成规则的全部输出文件列表

获取Snakemake规则所有输出路径的实现方案

现有Snakefile中extractfeat规则定义如下:

rule extractfeat:
    input:
        '/path/to/file/{genome}.gbk'
    output:
        '{genome}_{locus_tag}_{gene}_{substrate}.fasta'
    shell:
        '''
        extractfeat {input} {output} -value {wildcards.genome}_{wildcards.locus_tag} -type CDS -describe product,locus_tag
        '''

同时存在一份制表符/多空格分隔的通配符取值表,列依次为genome、locus_tag、gene、substrate,每行对应一组通配符组合,需要生成所有符合规则output格式的文件路径,每行一个。


方案1:命令行直接生成(适合快速导出路径列表)

假设通配符表文件名为wildcard_table.tsv,直接执行awk命令即可批量生成路径,结果写入output_file_list.txt:

# 自动跳过表头,兼容制表符、多空格分隔的输入格式
awk 'NR>1 {printf "%s_%s_%s_%s.fasta\n", $1,$2,$3,$4}' wildcard_table.tsv > output_file_list.txt

如果确认输入文件严格使用制表符分隔,可以加上分隔符参数提升解析准确性:

awk -F '\t' 'NR>1 {printf "%s_%s_%s_%s.fasta\n", $1,$2,$3,$4}' wildcard_table.tsv > output_file_list.txt

方案2:Snakemake流程内动态生成(适合流程开发场景)

如果需要在Snakefile中直接引用所有输出作为目标任务,不需要额外导出文件,可以直接在流程内读取表格生成路径列表:

import pandas as pd

# 读取通配符表,sep="\s+"可同时兼容制表符、多空格分隔的格式
wildcard_tbl = pd.read_csv("wildcard_table.tsv", sep="\s+")
# 按规则output格式批量拼接所有输出路径
target_outputs = [
    f"{row.genome}_{row.locus_tag}_{row.gene}_{row.substrate}.fasta"
    for _, row in wildcard_tbl.iterrows()
]

# 将路径列表传入rule all的input,即可触发所有对应任务的运行
rule all:
    input:
        target_outputs

生成的路径格式示例(对应示例表格前3行):

PalbDSM11370_02121_susC_pululan.fasta
PalbDSM11370_02122_susD_pululan.fasta
PalbDSM11370_01210_susC_arabinan.fasta

内容的提问来源于stack exchange,提问作者aetobatus-narinari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:18:13