2016-06-21 11 views
0

Ich habe ein Verzeichnis mit 10 Unterverzeichnissen (dir01 bis dir10) und eine Anzahl von Dateien in jedem von ihnen (neue Dateien werden jeden Tag zu den Unterverzeichnissen hinzugefügt) .Verarbeiten Sie mehrere Verzeichnisse und alle Dateien innerhalb von snakemake

Ich versuche, eine snakemake Datei zu schreiben, die alle Unterverzeichnisse und alle Dateien durchläuft und sie verarbeitet (führen Sie meine ausführbare Datei convert.exe aus, um meine .Stp-Dateien in .Xml zu konvertieren). Die verarbeiteten Dateien werden in ein neues Verzeichnis verschoben, aber in Unterverzeichnisse mit denselben Namen wie zuvor und demselben Dateinamen.

So - als Beispiel am Ende soll der endgültige Auftragsablauf ähnlich läuft dazu:

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

Ich würde auch diese gerne teilen über die 12 CPUs ich habe Zugriff auf es läuft parallel zu.

Ich habe gerade angefangen, snakemake zu verwenden und habe ein paar Tutorials durchgelaufen, bin aber ein bisschen verloren.

Hier ist, was ich bisher habe: Es funktioniert nicht und ich bin nicht einmal sicher, ob dies der Schreibweise ist, darüber zu gehen. Dies ist auch nur der erste Teil - nur versuchen, die Verzeichnisse und Dateien durchzulaufen (nicht versuchen, noch zu konvertieren oder parallel zu laufen).

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: 
       "..." 

Irgendwelche Hilfe über, wie man darüber geht, würde sehr geschätzt werden!

Danke!

Antwort

0

Haben Sie diese FAQ entry überprüft?

Versuchen Sie folgendes:

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}" 

Ihre glob_wildcards funktionieren nicht. Sie würden benötigen

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

Aber Sie müssen wirklich alles auf einmal zu glob, wie in meinem Beispiel. expand wird alle (N x N) Kombinationen der zwei Eingangslisten machen. Sie können diese Funktion verwenden, wenn Sie in jedem Verzeichnis genau dieselben Dateien haben. Wenn Sie jedoch zip bereitstellen, werden die beiden Listen Element für Element kombiniert.

Verwandte Themen