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

如何将.txt文件的每一行作为snakemake的独立输入

Snakemake读取外部txt文件每行作为输入的实现方法

你只需要在Snakefile中先读取filenames.txt的内容,处理掉每行末尾的换行符和空行,得到文件名列表后直接传入规则的input字段即可,根据流程需求分两种常见用法:

1. 所有文件作为单个规则的批量输入

如果你的规则需要一次性用到txt里列出的全部文件,直接读取后赋值给input参数即可:

# 读取文件,过滤空行,去掉每行首尾的空白/换行符
with open("filenames.txt", "r", encoding="utf-8") as f:
    input_file_list = [line.strip() for line in f if line.strip()]

rule all:
    input:
        "all_merged.txt"

rule merge_files:
    input:
        input_file_list  # 这里会自动展开为a.txt、b.txt、c.txt、d.txt
    output:
        "all_merged.txt"
    shell:
        "cat {input} > {output}"

2. 逐文件生成独立处理任务

如果你需要对txt里的每个文件单独跑处理逻辑,把读取到的文件列表作为总目标传给rule all,搭配通配符规则即可自动生成所有任务:

with open("filenames.txt", "r", encoding="utf-8") as f:
    file_list = [line.strip() for line in f if line.strip()]

rule all:
    input:
        # 为每个输入文件定义对应输出路径,比如处理后加processed_前缀
        [f"processed_{fname}" for fname in file_list]

rule process_single_file:
    input:
        "{fname}"
    output:
        "processed_{fname}"
    shell:
        # 这里替换成你自己的处理命令即可
        "wc -l {input} > {output}"

注意事项:filenames.txt里写的文件路径如果是相对路径,需要相对于你执行snakemake命令的工作目录,否则snakemake会报找不到文件的错误,你也可以直接写绝对路径避免路径问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:27:22