我正在尝试创建一个蛇形管道,其输出由特定文件夹中存在的一组测序文件确定。我的文件路径的结构如下:
project_dir
> Snakefile
> code
> python_scripts
> ab1_to_fastq.py
> data
> 1.ab1_files
> A.ab1
> B.ab1
> C.ab1
> 2.fastq_files
这是我实际的Snakefile的代码
import glob
import os
def collect_reads():
ab1_files = glob.glob("data/1.ab1_files/*.ab1")
ab1_files.sort()
ab1_reads = [ab1_file.split('/')[-1].replace('.ab1', '') for ab1_file in ab1_files]
return ab1_reads
READS = collect_reads()
print(expand("data/2.fastq_files/{read}.fastq", read=READS))
rule convert_ab1_to_fastq:
input:
ab1="data/1.ab1_files/{read}.ab1"
output:
fastq="data/2.fastq_files/{read}.fastq"
shell:
"python code/python_scripts/ab1_to_fastq.py --ab1 {input.ab1} --fastq {output.fastq}"
rule all:
input:
fastq=expand("data/2.fastq_files/{read}.fastq", read=READS)
我的理解是,这all
应该是我的目标规则,并且该规则中fastq的输入变量的计算结果为
['data/2.fastq_files/A.fastq', 'data/2.fastq_files/B.fastq', 'data/2.fastq_files/C.fastq']
运行脚本时,管道中的打印输出似乎可以确认这一点。但是,WorkflowError: Target rules may not contain wildcards. Please specify concrete files or a rule without wildcards.
每当我运行此脚本时,都会出现错误。
奇怪的是,我可以从expand生成的列表中复制路径之一,以直接调用snakemake,例如snakemake data/2.fastq_files/A.fastq
,管道成功完成。
我想念什么?
可能蛇型认为您的目标规则convert_ab1_to_fastq
不是all
。默认情况下,snakemake将第一个规则作为目标规则。all
首先声明,然后查看是否可以解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句