使用目录作为snakemake中特定脚本的输入

时间:2020-06-30 23:06:11

标签: 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"

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

dirname:
    Sero_1: /project/work/test_snake/Sero_1

我知道要重构的东西很多(我仍然不习惯使用蛇形制作,因为在本教程旁边,这是我有史以来的第一个工作流程)。我也理解问题可能在于输入不能是目录。从几天开始,我尝试了几件事,但我想我可能会因为自己的挣扎而问一些建议

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

1 个答案:

答案 0 :(得分:1)

如果有帮助,我可以通过以下方法解决规则“ 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}"

对于config.yaml文件:

dirname:
    - /project/work/test_snake/Sero_1
    - /project/work/test_snake/Sero_2