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

Snakemake规则中用不同通配符实现fastq转sam的咨询

解决Snakemake输入输出通配符匹配问题的实现方案

1. 读取样本信息并构建映射关系

在Snakefile开头用pandas读取info_file.txt,构建(SM, ID)与对应fastq文件的映射,同时生成所有目标SAM文件的路径:

import pandas as pd

# 读取样本信息,根据文件实际分隔符调整sep(如制表符\t或逗号,)
sample_info = pd.read_csv("info_file.txt", sep="\t")

# 构建映射:以(SM, ID)为键,对应fastq文件路径为值
sample_to_fastq = {(row["SM"], row["ID"]): row["FILE"] for _, row in sample_info.iterrows()}

# 生成所有需要生成的SAM文件路径列表
target_sams = [f"ALIGNEMENT/{sm}/{id}.sam" for sm, id in sample_to_fastq.keys()]

2. 定义总目标规则

通过rule all让Snakemake明确需要生成所有目标SAM文件:

rule all:
    input:
        target_sams

3. 编写比对规则关联输入输出

利用lambda函数根据通配符{sm}和{id}从映射中匹配对应的fastq输入,同时处理输出目录的创建:

rule align:
    output:
        "ALIGNEMENT/{sm}/{id}.sam"
    input:
        lambda wildcards: sample_to_fastq[(wildcards.sm, wildcards.id)]
    shell:
        """
        # 提前创建输出目录,避免因目录不存在报错
        mkdir -p ALIGNEMENT/{wildcards.sm}
        # 替换为你实际使用的比对命令(如bwa mem、bowtie2等)
        bwa mem reference_genome.fasta {input} > {output}
        """

关键说明

  • 借助映射字典打通了{sm}、{id}通配符与输入fastq文件的关联,彻底解决输入输出直接通配符不匹配的问题。
  • 每个(SM, ID)组合对应一次规则执行,完全满足单文件单任务的需求。
  • 若比对命令需要额外参数(如线程数、参考基因组路径),直接在shell块中调整即可。

内容的提问来源于stack exchange,提问作者Théo Durand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:33:23