2016-06-21 43 views
0

我有一个包含10个子目录(dir01到dir10)的目录以及每个目录中的许多文件(每天将新文件添加到子目录中) 。处理多个目录和使用snakemake中的所有文件

我试图编写一个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: 
       "..." 

任何关于如何去做这个的帮助将不胜感激!

谢谢!

回答

0

你检查了这个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×N)个组合。如果每个目录中的文件完全相同,则可以使用该功能。但是,提供zip将这两个列表逐个元素组合在一起。

相关问题