python - Snakemake - 尝试使用 global_wildcards 时出现问题(TypeError:预期的 str,得到列表)
问题描述
我是使用 Snakemake 的新手,也不是 Python 专家,所以答案可能很明显。在我尝试使用glob_wildcards将我的所有 fastq.gz 文件从一个目录 (FASTQDIR) 转换为 fastqc 文件之前,我的工作流程中的一切都在我的测试中运行良好。
SAMPLES 列表中的示例名称没问题,但我有一个错误,说需要一个字符串而不是列表(我假设这是我的 SAMPLES 列表),我真的不知道在我的 Snakefile 中的哪个位置进行更正它。我知道这肯定与我对 glob_wildcards 的使用有关,但我不明白问题出在哪里。你知道我该如何解决吗?
这是我的Snakefile代码:
FASTQDIR = "/fastq/files/directory/"
WDIR = "/my/working/directory/"
SAMPLES, = glob_wildcards(FASTQDIR + "{sample}.fastq.gz")
rule all:
input:
expand(WDIR + "Fastqc/{sample}_fastqc.html", sample=SAMPLES),
expand(WDIR + "Fastqc/{sample}_fastqc.zip", sample=SAMPLES)
#Generates fastqc file for the sample fastq.gz file in the Fastqc directory
rule fastqc_generate_qc:
input:
expand(FASTQDIR + "{sample}.fastq.gz", sample=SAMPLES)
output:
expand(WDIR + "Fastqc/{sample}_fastqc.html", sample=SAMPLES),
expand(WDIR + "Fastqc/{sample}_fastqc.zip", sample=SAMPLES)
shell:
"fastqc --outdir Fastqc/ {input}"
这是整个Traceback:
Traceback (most recent call last):
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/__init__.py", line 420, in snakemake
force_use_threads=use_threads)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/workflow.py", line 480, in execute
success = scheduler.schedule()
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/scheduler.py", line 215, in schedule
self.run(job)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/scheduler.py", line 229, in run
error_callback=self._error)
File "/home/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/executors.py", line 59, in run
self._run(job)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/executors.py", line 120, in _run
super()._run(job)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/executors.py", line 66, in _run
self.printjob(job)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/executors.py", line 85, in printjob
msg=job.message,
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/jobs.py", line 175, in message
self.rule.message else None)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/jobs.py", line 542, in format_wildcards
return format(string, **_variables)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/site-packages/snakemake/utils.py", line 259, in format
return fmt.format(_pattern, *args, **variables)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/string.py", line 187, in format
return self.vformat(format_string, args, kwargs)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/string.py", line 191, in vformat
result, _ = self._vformat(format_string, args, kwargs, used_args, 2)
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/string.py", line 201, in _vformat
self.parse(format_string):
File "/home/miniconda3/envs/snakemake-tutorial/lib/python3.5/string.py", line 285, in parse
return _string.formatter_parser(format_string)
TypeError: expected str, got list
预先感谢您的帮助
解决方案
您在这里没有使用通配符。
您的规则fastqc_generate_qc
将所有 fastq 文件作为输入,并在此处输出所有 fastqc 文件。
在snakemake 中要记住的一件事是:expand
生成文件列表。你不想在这里:
rule fastqc_generate_qc:
input:
FASTQDIR + "{sample}.fastq.gz"
output:
WDIR + "Fastqc/{sample}_fastqc.html",
WDIR + "Fastqc/{sample}_fastqc.zip"
shell:
"fastqc --outdir Fastqc/ {input}"
这sample
是一个通配符。这是您的规则,所有这些都会触发真实文件名的生成。然后,fastqc_generate_qc 规则将使用通配符将该规则应用于所有规则中要求的任何输出。
有关信息,如果要在扩展函数中使用通配符,则必须将括号加倍:
expand("path/{{study}}/{sample}, sample=SAMPLES)
这里,study
是通配符,sample
不是。sample
值在 expand 函数的第二个参数中定义。
推荐阅读
- javascript - 如何使用 mark.js 正则表达式突出显示正数或负数?
- python - 纸浆约束中的指标如何建立条件
- regex - 正则表达式仅匹配指定单词后的第一行
- sql - “ORA-00933: SQL 命令未正确结束”
- javascript - 无法在 Vue.js 中将数据从模型传递到方法
- linux - `< <` 有什么作用(注意两个 `<` 符号之间的空格)?
- apache-spark - “SparkSession”对象没有属性“databricks”
- shell - 如何防止对我的 docker 容器的 root 访问
- python - dateutil 和闰年
- javascript - 在 Qualtrics 中使用 Javascript 随机化问题文本