Snakemake中如何正确读取配置文件定义规则输入
报错原因
Snakemake规则的input块识别命名输入时,需要接收展开的键值对结构。直接写入config["inputs"]传入的是完整字典对象,会被判定为单个无名称的位置参数输入,Snakemake不会自动解析字典内部的labs、demo键,因此触发输入文件缺失报错。
实现方法
- 先在Snakefile文件最顶部加载你的JSON配置文件:
# 声明配置文件路径,放在Snakefile起始位置 configfile: "config.json"
- 修改规则的
input块,用Python的双星号解包符**展开配置中的inputs字典,即可完整保留配置里的原有键名,不需要调整JSON配置的结构:
rule test: input: **config["inputs"] output: "outputs/output.txt" script: "programs/myprogram.py"
效果说明
- 改完后输入项的命名和硬编码时完全一致,在
myprogram.py里可以直接通过snakemake.input.labs、snakemake.input.demo读取对应路径 - 后续所有输入路径的增删修改只需要调整config.json文件,不需要改动规则代码
- 如果需要在规则里额外加其他输入项,只要保证自定义输入的键名和配置里的键名不冲突即可,写法示例:
rule test: input: other_input = "data/other.csv", **config["inputs"] output: "outputs/output.txt" script: "programs/myprogram.py"
内容的提问来源于stack exchange,提问作者Kieran Martin
相关产品推荐
相关产品推荐

