使用snakemake

时间:2016-06-21 20:27:26

标签: python linux snakemake

我有一个包含10个子目录(dir01到dir10)的目录,每个目录中都有许多文件(每天都会将新文件添加到子目录中)。

我正在尝试编写一个snakemake文件,该文件将遍历所有子目录和所有文件并处理它们(运行我的convert.exe可执行文件将我的.Stp文件转换为。 XML)。已处理的文件将被移动到一个新目录,但会移动到与以前名称相同的子目录和相同的文件名。

所以 - 最后作为一个例子,最终的工作流程应该与此类似:

/data01/dir01/Sample1.Stp --> processed by convert.exe --> /data01/temp/dir01/Sample1.xml 

我还想把这个分配给我有权访问的12个CPU,并行运行。

我刚开始使用snakemake并且已经完成了几个教程但是有点迷失。

这是我到目前为止所拥有的: 它不起作用,我甚至不确定这是否是写它的方式。 这也只是第一部分 - 只是试图遍历目录和文件(不尝试转换或并行运行)。

directories = glob_wildcards("/data01/{dir}")
files = glob_wildcards("/data01/{dir}/{file}")

rule all:
        input:
                expand("/data01/temp/{dir}/{file}.moved.Stp", dir=directories, file=files)

rule sort:
        input:
                "/data01/{dir}/{file}.Stp"
        output:
                "/data01/temp/{dir}/{file}.moved.Stp"
        shell:
                "..."

非常感谢任何关于如何解决这个问题的帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

您检查了这个FAQ entry吗?

试试这个:

directories, files = glob_wildcards("data01/{dir}/{file}")

rule all:
    input:
        expand("data01/temp/{dir}/{file}.moved.Stp",
               zip, dir=directories, file=files)

rule copy:
    input:
        "data01/{dir}/{file}.Stp"
    output:
        "data01/temp/{dir}/{file}.moved.Stp"
    shell:
        "cp {input} {output}"

您的glob_wildcards无效。你需要

directories, = glob_wildcards("/data01/{dir}")

但是你真的需要一次性完成所有内容,就像我的例子一样。 expand将生成两个输入列表的所有(N x N)个组合。如果每个目录中都有完全相同的文件,则可以使用该功能。但是,提供zip会逐个元素地组合两个列表。