这是我正在尝试做的事情的一个例子:
mydictionary={
'apple': 'crunchy fruit',
'banana': 'mushy and yellow'
}
rule all:
input:
expand('{key}.txt', key=mydictionary.keys())
rule test:
output: temp('{f}.txt')
shell:
"""
echo {mydictionary[wildcards.f]} > {output}
cat {output}
"""
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我无法访问字典内容。我尝试使用双大括号,但文本文件的内容变成了文字{mydictionary[wildcards.f]}(而我想要字典中相应条目的内容)。
我很确定括号标记只能用变量值的字符串表示形式替换变量,但不支持括号内的任何代码评估。也就是说,{mydictionary[wildcards.f]}将尝试查找字面名为 的变量"mydictionary[wildcards.f]"。同样,{mydictionary}[{wildcards.f}]只需将字符串值粘贴在一起。因此,我认为您无法shell仅在该部分中完成您想要的事情。相反,您可以在本params节中完成您想要的操作:
rule test:
output: temp('{f}.txt')
params:
value=lambda wcs: mydictionary[wcs.f]
shell:
"""
echo '{params.value}' > {output}
cat {output}
"""
Run Code Online (Sandbox Code Playgroud)