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

Nextflow中如何将CSV路径列转为文件列表并传入流程

Nextflow多样本多路径处理方案

问题背景

需要处理含多样本参数的CSV文件,其中Paths列用引号包裹1个或多个逗号分隔的文件路径,目标是将这些路径全部传入流程完成暂存,但直接拆分得到的字符串列表无法被流程识别为有效文件路径。

CSV结构如下:

IDSamplePaths
A1B1"path1,path2,path3"
A2B2"path1"

初始读取CSV的Channel代码:

Channel.fromPath(params.samples)
        .splitCsv(quote:'"', header:true)
        .set { samples } 

更新后已实现字符串拆分,但列表无法作为路径传入流程:

workflow {
    Channel.fromPath(params.samples)
        .splitCsv(quote:'"', header:true)
        .map {col -> tuple(
            "${col.Sample}",
            "${col.ID}",
            "${col.Paths}".split(',') 
        )
        }
        .set { samples } 
    samples.view()
}

解决方法

核心是将拆分后的路径字符串转换为Nextflow可识别的File对象列表,同时确保流程输入正确接收文件列表。

1. 修正Channel处理逻辑

在map操作中,将拆分后的每个路径字符串转为File对象(附带去空格处理,避免CSV中路径前后的空格问题):

workflow {
    Channel.fromPath(params.samples)
        .splitCsv(quote:'"', header:true)
        .map { col -> 
            tuple(
                col.Sample,
                col.ID,
                col.Paths.split(',').collect { file(it.trim()) }
            )
        }
        .set { samples }

    // 调用自定义流程
    SampleProcessing(samples)
}

2. 定义支持文件列表输入的流程

流程输入使用path类型接收文件列表,Nextflow会自动暂存所有关联文件:

process SampleProcessing {
    input:
    tuple val(sample_name), val(sample_id), path(file_paths)

    script:
    """
    # 示例处理脚本
    echo "当前处理样本: ${sample_name}"
    echo "待处理文件:"
    for file in ${file_paths.join(' ')}; do
        echo "- \${file}"
    done
    """
}

关键说明

  • file(it.trim()):将字符串路径转为Nextflow File对象,trim()用于清理路径前后可能存在的空格
  • path(file_paths):Nextflow允许path类型接收文件列表,会自动完成所有文件的暂存与路径映射
  • 若需校验文件存在性,可修改输入定义为path(file_paths, exists: true)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:15:37