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

Snakemake中glob_wildcards与wildcard_constraints使用问题求助

问题描述

在Snakemake流程中提取RNA-seq测序文件的通配符时出现匹配错误,具体细节如下:

文件示例

  • Mus_musculus数据集(PRJNA362883_GSE93946_SRP097621):SRR5195524_GSM2465521_KrasT_45649_NoDox_Mus_musculus_RNA-Seq_1.fastq.gz
  • Homo_sapiens数据集(PRJNA493818_GSE120639_SRP162872):SRR7942395_GSM3406786_sAML_Control_1_Homo_sapiens_RNA-Seq_1.fastq.gz

期望通配符输出

  • 数据集:['PRJNA362883_GSE93946_SRP097621', ...]
  • 样本:['SRR5195524_GSM2465521_KrasT_45649_NoDox', ...]
  • 物种:['Mus_musculus', ...]
  • 测序读段编号:['1', ...]

尝试的代码及问题

使用以下代码尝试匹配:

import glob
import os
DATASET,SAMPLE,SPECIES,FRR = glob_wildcards(config["project_path"]+"resources/raw_datasets/{dataset}/{sample}_{species}_RNA-Seq_{frr}.fastq.gz")
print(DATASET,SAMPLE,SPECIES,FRR)

由于文件名包含多个下划线,导致样本通配符错误包含物种前缀,物种通配符仅提取到后半部分。尝试设置wildcard_constraints: species = '!(_sapiens_)'未解决问题。

解决方案

核心是利用wildcard_constraints给物种通配符指定精准的正则匹配规则,消除下划线带来的匹配歧义。

正确代码实现

from snakemake.io import glob_wildcards

# 定义通配符约束:限定物种只能是Mus_musculus或Homo_sapiens
wildcard_constraints:
    species = "(Mus_musculus|Homo_sapiens)"

# 匹配目标文件路径
DATASET, SAMPLE, SPECIES, FRR = glob_wildcards(
    config["project_path"] + "resources/raw_datasets/{dataset}/{sample}_{species}_RNA-Seq_{frr}.fastq.gz"
)

print(DATASET, SAMPLE, SPECIES, FRR)

规则说明

  • 通过wildcard_constraints将species通配符限定为仅匹配Mus_musculus或Homo_sapiens,Snakemake会优先匹配这两个固定字符串,避免将样本部分的下划线误分割到物种通配符中。
  • 此正则规则直接针对已知的两个物种做精确匹配,彻底解决了下划线导致的匹配错位问题。

内容的提问来源于stack exchange,提问作者manvenk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:24:17