Snakemake 规则使用通配符简化文件名
Snakemake Rule to simplify file names using wildcards
输入数据
.
├── 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 规则
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.fastq 作为输出文件的符号链接。我想删除多余的“fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0”部分。
执行此操作的最佳方法是什么?
一个选项是在仅依赖于 {sample_demultiplex}
通配符的函数中查找输入的文件名。此示例代码可能适用于此,具体取决于您的文件夹设置方式(现在它假设每个 {sample_demultiplex}
通配符仅对应于一个 fastq 文件。)
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}"
输入数据
.
├── 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 规则
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.fastq 作为输出文件的符号链接。我想删除多余的“fastq_runid_6292747b0109c4fa5918c50eb8204bb715f19ad0_0”部分。
执行此操作的最佳方法是什么?
一个选项是在仅依赖于 {sample_demultiplex}
通配符的函数中查找输入的文件名。此示例代码可能适用于此,具体取决于您的文件夹设置方式(现在它假设每个 {sample_demultiplex}
通配符仅对应于一个 fastq 文件。)
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}"