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
规则尚未完成。请注意,动态文件已被替换为