来自 json 文件的路径不会在 Snakemake 中扩展

Paths from json file don't expand in Snakemake

我有一个 Snakemake 管道,我从 json 文件中获取文件夹的 input/output 路径,并使用扩展函数获取路径。

import json

with open('config.json', 'r') as f:
    config = json.load(f)

wildcard = ["1234", "5678"]

rule them_all:
    input:
        expand('config["data_input"]/data_{wc}.tab', wc = wildcard)

    output:
        expand('config["data_output"]/output_{wc}.rda', wc = wildcard)
    shell:
        "Rscript ./my_script.R"

我的config.json

{
"data_input": "/very/long/path",
"data_output": "/slightly/different/long/path"
}

在尝试干燥 运行 时,我收到以下错误:

$ snakemake -np
Building DAG of jobs...
MissingInputException in line 12 of /path/to/Snakefile:
Missing input files for rule them_all:
config["data_input"]/data_1234.tab
config["data_input"]/data_5678.tab

文件在那里,它们的路径是 /very/long/path/data_1234.tab

这可能是一个容易实现的目标,但我在扩展语法中做错了什么?还是我调用 json 文件的方式?

expand() 在用引号扩展路径时不会解释其第一个参数对字典的访问,因此必须在通配符中使用 expand() 进行此操作。 在这种情况下,正确的语法应该是

expand('{input_folder}/data_{wc}.tab', wc = wildcard, input_folder = config["data_input"])