来自 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"])
我有一个 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"])