Vic*_*T05 4 python linux snakemake
我有一个包含 10 个子目录(dir01 到 dir10)的目录,每个子目录中都有许多文件(每天都会向子目录添加新文件)。
我正在尝试编写一个snakemake文件,该文件将遍历所有子目录和所有文件并处理它们(运行我的convert.exe可执行文件以将我的 .Stp 文件转换为 .Xml)。处理后的文件将移动到新目录,但会移动到与之前同名且文件名相同的子目录中。
因此 - 作为最后的示例,最终的作业流程应类似于以下运行:
/data01/dir01/Sample1.Stp --> processed by convert.exe --> /data01/temp/dir01/Sample1.xml
Run Code Online (Sandbox Code Playgroud)
我还想将其分配到我可以访问的 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:
"..."
Run Code Online (Sandbox Code Playgroud)
任何有关如何解决此问题的帮助将不胜感激!
谢谢!
根据此常见问题解答条目,尝试以下操作:
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}"
Run Code Online (Sandbox Code Playgroud)
你glob_wildcards没有工作。你需要
directories, = glob_wildcards("/data01/{dir}")
Run Code Online (Sandbox Code Playgroud)
但你确实需要一次性将所有内容都放在一起,就像我的例子一样。expand将对两个输入列表进行所有 (N x N) 组合。如果每个目录中都有完全相同的文件,则可以使用该功能。然而,提供zip逐个元素组合两个列表。
| 归档时间: |
|
| 查看次数: |
5387 次 |
| 最近记录: |