在snakemake中使用目录作为详细脚本的输入

Deb*_*h N 5 snakemake

如果我的问题看起来有点愚蠢,我很抱歉。

所以,我目前正在尝试在snakemake上编写一个工作流程(我的第一个,作为实习生),我必须自动化几个步骤,这些步骤全部取决于已经制作的python脚本。我的麻烦是这些脚本的输入和输出是文件夹本身(它们的内容对应于第一个目录内容链接的文件..)。

到目前为止,我做到了这一点(正如我们所期望的那样,这不起作用)

configfile: "config.yaml"

rule all:
    input:
        "{dirname}/directory_results/sub_dir2", dirname=config["dirname"]

rule script1:
    input:
        "{dirname}/reference/{files}.gbff", dirname=config["dirname"]
    output:
        "{dirname}/directory_results", dirname=config["dirname"]
    shell:
        "python script_1.py -i {dirname}/reference -o {output}"

rule script2:
    input:
        "{dirname}/directory_results/sub_dir1/{files}.gbff.gff", dirname=config["dirname"]
    output:
        "{dirname}/directory_results/sub_dir2", dirname=config["dirname"]
    shell:
        "python script_2.py -i {dirname}/directory_results/sub_dir1"
Run Code Online (Sandbox Code Playgroud)

至于 config.yaml,这是我现在使用的一个简单文件,用于放置所述“dirname”的路径

dirname:
    Sero_1: /project/work/test_snake/Sero_1
Run Code Online (Sandbox Code Playgroud)

我知道还有很多东西需要重构(我仍然不习惯 Snakemake,因为除了教程之外,这是我制作的第一个工作流程)。我还了解到问题可能在于输入不能是目录。几天以来我尝试了一些事情,我想我可能会问一些建议,因为我正在挣扎

我如何放置允许用于脚本目录的输入?

Deb*_*h N 4

如果有帮助,我通过执行以下操作解决了我的规则“script1”:

configfile: "config.yaml"

dirname = config["dirname"]

rule all:
    input:
        expand("{dirname}/directory_results/", "{dirname}/directory_results/subdir2" dirname=dirname)

rule script1:
    input:
        expand("{dirname}/reference/", dirname=dirname)
    output:
        directory(expand("{dirname}/directory_results", dirname=dirname))
    shell:
        "python script_1.py -i {input} -o {output}"

rule script2:
    input:
        rules.script1.output
    output:
        directory(extend("{dirname}/directory_results/sub_dir2", dirname=dirname))
    shell:
        "python script_2.py -i {input}"
Run Code Online (Sandbox Code Playgroud)

至于config.yaml文件:

dirname:
    - /project/work/test_snake/Sero_1
    - /project/work/test_snake/Sero_2
Run Code Online (Sandbox Code Playgroud)