Python 分割文件上的snakemake工作流
也许这个问题已经得到了回答,但我无法提出正确的查询来找到它 我有一个大文件需要分析。为了快速完成这项工作,我首先将大文件拆分为多个小文件,并对每个小文件分别进行并行分析。对于这一点,我有这样的想法:Python 分割文件上的snakemake工作流,python,snakemake,Python,Snakemake,也许这个问题已经得到了回答,但我无法提出正确的查询来找到它 我有一个大文件需要分析。为了快速完成这项工作,我首先将大文件拆分为多个小文件,并对每个小文件分别进行并行分析。对于这一点,我有这样的想法: rule all: input: 'bigfile.{wildcards.partnum}.out', rule split_big_file: input: 'bigfile' output: touch('splitting_file.done')
rule all:
input:
'bigfile.{wildcards.partnum}.out',
rule split_big_file:
input: 'bigfile'
output: touch('splitting_file.done')
shell: 'split {input}'
rule process_small_files:
input:
small_file = 'bigfile.{wildcards.partnum}',
done = 'splitting_file.done'
output: 'bigfile.{wildcards.partnum}.out'
shell:
'some_command {input.small_file} > {output}'
规则split\u big\u file
使用split
命令并生成文件名为bigfile.001、bigfile.002等的文件。我在规则split_big_file
中使用touch('spliting_file.done')
,以确保下一个规则处理_small_file
在完成之前不会启动。当我尝试运行此程序时,我得到一个规则进程缺少输入文件\u小文件
错误。我怎样才能避开这件事 规则“process\u small\u files”看到它需要一个文件,如bigfile.001,但据snakemake所知,工作流中没有规则可以生成该文件。虽然split_big_文件将生成该文件,但在“output”部分中,它只声明它将生成文件“Spliting_file.done”,因此snakemake认为工作流无法生成bigfile.001,并假设它应该已经存在
由于split命令根据输入文件的大小生成不同数量的文件,因此需要使用snakemake的动态文件功能:规则“process\u small\u files”看到它需要一个文件,如bigfile.001,但据snakemake所知,工作流中没有规则可以生成该文件。虽然split_big_文件将生成该文件,但在“output”部分中,它只声明它将生成文件“Spliting_file.done”,因此snakemake认为工作流无法生成bigfile.001,并假设它应该已经存在
由于split命令根据输入文件的大小生成不同数量的文件,因此您需要使用snakemake的动态文件功能:当我使用动态
时,如何使处理小文件
等待分割大文件
完成?我不能使用我的touch('spliting_file.done')
技巧,因为“具有动态输出的规则可能不会定义任何非动态输出文件。”当我放下分割文件.done
输出时,它不会等到分割大文件
规则尚未完成。请注意,当我使用动态
时,动态文件已被取代,如何让处理小文件
等待分割大文件
完成?我不能使用我的touch('spliting_file.done')
技巧,因为“具有动态输出的规则可能不会定义任何非动态输出文件”。当我删除spliting_file.done
输出时,它不会等到split_big_file
规则尚未完成。请注意,动态文件已被替换为