You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake:将生成文件移入同名新目录时遇缺失输入报错求解

Snakemake路径不匹配问题的解决方案

问题背景

用户通过accessions.txt(每行存储一个编号)使用Snakemake批量生成文件,需求是为每个编号创建同名目录,并将对应.txt文件放入该目录。当输出路径设为"{n}.txt"时可正常生成文件,但改为"{n}/{n}.txt"后触发错误:

Missing input files for rule all:
affected files:
SRRXXXXX.txt

错误原因

rule all的输入路径与rule create_directory的输出路径不匹配:

  • read_tissues_output()函数返回的是{sample}.txt格式的文件路径(如SRRXXXXX.txt)
  • 而rule create_directory实际生成的是{n}/{n}.txt格式的路径(如SRRXXXXX/SRRXXXXX.txt)
    Snakemake无法找到rule all指定的输入文件,因此抛出缺失文件的错误。

修正后的代码

只需调整read_tissues_output()的返回格式,使其与输出路径一致即可:

def read_tissues_output():
    with open('accessions.txt') as f:
        samples = [sample for sample in f.read().split('\n') if len(sample) > 0]  # 过滤空行
        return expand("{sample}/{sample}.txt", sample=samples)


rule all:
    input:
        read_tissues_output()
         
         
rule create_directory:
    output:
        "{n}/{n}.txt"
    shell:
        """
        echo this is a {wildcards.n} > {output}
        """

补充说明

  • Snakemake会自动识别输出路径中的目录结构,在执行shell命令前自动创建所需目录,无需手动添加mkdir -p {wildcards.n}命令
  • 原代码中的空行过滤逻辑可确保不会处理accessions.txt中的无效空行

内容的提问来源于stack exchange,提问作者user25645294

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:12:10