首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通配符简化文件名的Snakemake规则

使用通配符简化文件名的Snakemake规则
EN

Stack Overflow用户
提问于 2022-04-28 16:26:21
回答 1查看 51关注 0票数 1

输入数据

代码语言:javascript
复制
.
├── barcode01
│   └── fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0.fastq
├── barcode02
│   └── fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0.fastq
├── barcode03
│   └── fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0.fastq
├── barcode04
│   └── fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0.fastq

Snakemake规则

代码语言:javascript
复制
rule symlink_results_demultiplex:
    input:
        inputdirectory+"/basecall/demultiplex/{sample_demultiplex}/{sample_runid}.fastq"
    output:
        outdirectory+"/mothur/{sample_demultiplex}.fastq"
    threads: 1
    shell:
        "ln -s {input} {output}"

但是,这个错误是因为没有使用相同的通配符。我想要创建一个符号链接,其中的输出文件只有barcode01.Quickq。我想删除多余的"fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0“部件。

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-28 17:34:02

一种选择是在只依赖于{sample_demultiplex}通配符的函数中找到输入的文件名。此示例代码可能对此起作用,具体取决于您的文件夹的设置方式(现在它假设每个{sample_demultiplex} wilcard只对应于一个fastq文件)。

代码语言:javascript
复制
import os
import glob

def get_symlink_results_demultiplex_input(wildcards):
    fastq_dir = os.path.join(inputdirectory, "/basecall/demultiplex/", wildcards.sample_demultiplex)
    fastq_file = glob.glob("*.fastq", root_dir=fastq_dir)[0] # this assumes there is only ever one fastq file in a directory
    return os.path.join(fastq_dir, fastq_file)
    

rule symlink_results_demultiplex:
    input:
        get_symlink_results_demultiplex_input
    output:
        outdirectory+"/mothur/{sample_demultiplex}.fastq"
    threads: 1
    shell:
        "ln -s {input} {output}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72047212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档