如何基于Python字典定义rule all以生成指定格式的输出文件路径?
在Snakemake中基于字典生成
rule all的目标路径 假设我有以下Python字典:
d = {'A': ['a', 'b', 'c'], 'B': ['d', 'e', 'f']}
我希望针对字典d中的每个键,为d[key]内的每个元素生成格式为f"{key}/plots/{element}.pdf"的文件路径。
具体来说,基于上述字典d,期望得到的输出文件路径如下:
"A/plots/a.pdf" "A/plots/b.pdf" "A/plots/c.pdf" "B/plots/d.pdf" "B/plots/e.pdf" "B/plots/f.pdf"
请问如何定义一个rule all,基于该字典选择性地展开输入以实现此需求?
解决方案
在Snakemake中,你可以通过遍历字典的键值对生成目标路径列表,直接传入rule all的input参数,有两种常见实现方式:
方式一:列表推导式(简洁写法)
d = {'A': ['a', 'b', 'c'], 'B': ['d', 'e', 'f']} # 嵌套推导式生成所有目标路径 all_targets = [f"{key}/plots/{elem}.pdf" for key, elems in d.items() for elem in elems] rule all: input: all_targets
方式二:普通循环(可读性更强)
如果觉得嵌套推导式不够直观,也可以用循环逐步构建路径列表:
d = {'A': ['a', 'b', 'c'], 'B': ['d', 'e', 'f']} all_targets = [] for key, elems in d.items(): for elem in elems: all_targets.append(f"{key}/plots/{elem}.pdf") rule all: input: all_targets
说明
两种写法最终都会生成符合要求的路径列表,rule all会将这些路径作为全局目标,触发对应的规则来生成这些文件。
内容的提问来源于stack exchange,提问作者BCArg
相关产品推荐
相关产品推荐

