如何正确使用全球智能卡

2024-10-03 17:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有许多成对的fastq文件,在运行trim_galore包后,我遇到了一个问题,因为它将fastq文件命名为_1_val_1和_2_val_2,例如: AD50_CTGATCGTA_1_val_1.fq.gz和 AD50_CTGATCGTA_2_val_2.fq.gz

我想继续制作和使用蛇

import os
import snakemake.io
import glob

DIR="AD50"
(SAMPLES,READS,) = glob_wildcards(DIR+"{sample}_{read}.fq.gz")
READS=["1","2"]

rule all:
    input:
        expand(DIR+"{sample}_dedup_{read}.fq.gz",sample=SAMPLES,read=READS)

rule clumpify:
    input:
        r1=DIR+"{sample}_1_val_1.fq.gz",
        r2=DIR+"{sample}_2_val_2.fq.gz"
    output:
        r1out=DIR+"{sample}_dedup_1.fq.gz",
        r2out=DIR+"{sample}_dedup_2.fq.gz"
    shell:
        "clumpify.sh in={input.r1} in2={input.r2} out={output.r1out} out2={output.r2out} dedupe subs=0"

错误是:

Building DAG of jobs...
MissingInputException in line 13 of /home/peterchung/Desktop/Rerun-Result/clumpify.smk:
Missing input files for rule clumpify:
AD50/AD50_CTGATCGTA_2_val_2_val_2.fq.gz
AD50/AD50_CTGATCGTA_2_val_1_val_1.fq.gz

我用另一种方式累了,最接近的是它检测到了丢失的输入,比如 AD50_CTGATCGTA_1_val_2.fq.gz和AD50_CTGATCGTA_2_val_1.fq.gz不存在

我不确定我使用的glob_通配符函数是否正确,因为其中有许多下划线。我累了:

 glob_wildcards(DIR+"{sample}_{read}_val_{read}.fq.gz")

但效果并不理想


Tags: sampleimportreadinputdirvalruleglob
1条回答
网友
1楼 · 发布于 2024-10-03 17:14:53

Glob通配符实际上是将正则表达式应用于目录列表的包装器。默认情况下,通配符将贪婪地匹配到.*。您需要更具体地指定通配符,并确保规则输入匹配相同的模式匹配

通过您的示例:

AD50_CTGATCGTA_2_val_2.fq.gz
^ {sample}         ^ ^{read}

{sample}通配符将消耗所有内容,直到正则表达式不再匹配为止,直到val。{read}只剩下2

在rule all中,然后请求{sample}_dedup_{read}.fq.gz,即{AD50_CTGATCGTA_2_val}_dedup_{2}.fq.gz(保留大括号以显示通配符的位置)。当匹配到clumpify时,您请求输入: {AD50_CTGATCGTA_2_val}_2_val_2.fq.gz,这就是您丢失该文件的原因

要解决此问题,您有几个选项:

  • 如果示例应包含1_val部分,则需要更新clumpify的输入以匹配现有文件名(删除额外的_2_val,等等)
  • 若示例只包含AD50_CTGATCGTA,那个么构建一个更具体的文件名。考虑添加{a1}来限制匹配,例如^ {CD10}}用于读取。这似乎是您在最后一个示例中得到的

最后,默认情况下expand function应用提供的iterables的乘积。这就是为什么你会得到AD50_CTGATCGTA_1_val_2.fq.gz,例如。您需要添加zip作为第二个参数,以覆盖该默认值并匹配从glob_wildcards返回的通配符顺序。另见here

相关问题 更多 >