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
相关产品推荐
相关产品推荐

