2016-06-21 42 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將這兩個列表逐個元素組合在一起。

相關問題