You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成映射分组列表并集成到Snakemake工作流中?

实现思路与Snakemake代码

不用手动生成gpa/gpb这类重复分组列表,直接建立元素到所属分组的映射关系就能高效实现需求:

1. 定义分组与映射

在Snakefile开头先定义原始分组,并构建元素到对应分组的字典:

# 原始分组定义
gp1 = ["a", "b", "c"]
gp2 = ["x", "y", "z"]
all_elements = ["a", "b", "c", "x", "y", "z"]

# 建立元素→所属分组的映射
element_to_group = {}
for elem in gp1:
    element_to_group[elem] = gp1
for elem in gp2:
    element_to_group[elem] = gp2

2. 编写Snakemake规则

通过规则实现目录创建与文件复制逻辑:

# 总目标:触发所有元素的目录生成任务
rule all:
    input:
        expand("{elem}/", elem=all_elements)

# 单元素目录创建+文件复制规则
rule setup_dir_and_copy:
    output:
        directory("{elem}/")
    params:
        # 根据通配符获取当前元素对应的分组文件列表
        group_files=lambda wildcards: element_to_group[wildcards.elem]
    shell:
        """
        mkdir -p {output}
        cp {" ".join(params.group_files)} {output}
        """

3. 逻辑说明

  • 映射字典element_to_group直接关联每个元素到它所属的原始分组,比如element_to_group["a"]对应["a","b","c"],element_to_group["x"]对应["x","y","z"],省去手动生成冗余列表的步骤。
  • rule all作为总入口,触发所有元素的目录创建任务。
  • rule setup_dir_and_copy中,通过lambda函数根据通配符elem动态获取分组文件列表,再用" ".join()将列表转为空格分隔的文件名,执行复制操作。

运行Snakemake后,就能生成你需要的目标目录结构。

内容的提问来源于stack exchange,提问作者Dvik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:30:53