分割文件上的snakemake工作流

2024-10-02 12:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

也许这个问题已经得到了回答,但我无法提出正确的查询来找到它

我有一个大文件需要分析。为了快速完成这项工作,我首先将大文件拆分为多个小文件,并对每个小文件分别进行并行分析。对于这一点,我有这样的想法:

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_big_file使用split命令并生成文件名为bigfile.001, bigfile.002, etc的文件。我在规则split_big_file中使用touch('splitting_file.done')来确保下一个规则process_small_files在完成之前不会启动。当我试图运行这个程序时,我得到一个Missing input files for rule process_small_files错误。我怎样才能避开这件事


Tags: 文件inputoutputfilesruleprocessfilesmall
1条回答
网友
1楼 · 发布于 2024-10-02 12:25:05

规则“process\u small\u files”认为它需要一个文件,如bigfile.001,但据snakemake所知,工作流中没有规则可以生成该文件。虽然split_big_文件将生成该文件,但在“output”部分中,它只声明它将生成文件“Spliting_file.done”,因此snakemake认为工作流无法生成bigfile.001,并假设它应该已经存在

由于split命令根据输入文件的大小生成不同数量的文件,因此需要使用snakemake的动态文件功能:https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#dynamic-files

相关问题 更多 >

    热门问题