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
相关产品推荐
相关产品推荐

