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

多fastq文件FastQC分析:Bash+Python脚本实现技术问询

FastQC批量分析脚本优化与实现指导

原脚本存在的问题

  • 变量FILES指向目录,但循环直接遍历该变量只会处理目录名本身,不会遍历目录内的fastq文件
  • conda activate放在循环内重复执行,既浪费资源还可能引发环境激活异常
  • mkdir "$f"会尝试创建与原fastq文件同名的目录,若文件存在会直接报错
  • FastQC默认将结果输出到当前工作目录,无法实现每个样本结果独立存储

优化后的纯Bash实现脚本

#!/bin/bash

# 存放fastq文件的目录
FASTQ_DIR="/home/folder/sample"
# 结果根目录,所有样本的FastQC结果会放在这里的子目录中
OUTPUT_ROOT="/home/folder/fastqc_results"
# Conda环境名称
CONDA_ENV="FAST_qc"

# 提前激活conda环境,避免循环内重复执行
source $(conda info --base)/etc/profile.d/conda.sh
conda activate $CONDA_ENV

# 创建结果根目录(如果不存在)
mkdir -p $OUTPUT_ROOT

# 遍历目录下的所有fastq文件(支持.fastq和.fastq.gz后缀)
for f in $FASTQ_DIR/*.fastq $FASTQ_DIR/*.fastq.gz; do
    # 跳过不存在的文件(比如目录里只有.fastq.gz没有.fastq时,通配符会保留原字符串)
    [ -f "$f" ] || continue
    
    # 获取文件名(不含路径和后缀)作为结果子目录名
    sample_name=$(basename "$f" | sed -e 's/\.fastq\.gz$//' -e 's/\.fastq$//')
    sample_out_dir="$OUTPUT_ROOT/$sample_name"
    
    echo "正在处理样本: $sample_name"
    # 创建当前样本的结果目录
    mkdir -p "$sample_out_dir"
    
    # 执行FastQC,指定输出目录,关闭默认的交互式报告
    fastqc "$f" -o "$sample_out_dir" --noextract
done

# 可选:处理完后退出conda环境
conda deactivate

Bash+Python结合的实现方案

如果需要更灵活的文件筛选(比如按样本名规则过滤),可以用Python遍历文件并调用FastQC:

Python脚本(fastqc_batch.py)

import os
import subprocess

# 配置参数
FASTQ_DIR = "/home/folder/sample"
OUTPUT_ROOT = "/home/folder/fastqc_results"
CONDA_ENV = "FAST_qc"

# 激活conda环境的命令前缀
conda_activate_cmd = f"source $(conda info --base)/etc/profile.d/conda.sh && conda activate {CONDA_ENV} &&"

# 创建结果根目录
os.makedirs(OUTPUT_ROOT, exist_ok=True)

# 遍历目录下的fastq文件
for filename in os.listdir(FASTQ_DIR):
    if filename.endswith((".fastq", ".fastq.gz")):
        file_path = os.path.join(FASTQ_DIR, filename)
        # 获取样本名
        sample_name = os.path.splitext(os.path.splitext(filename)[0])[0]
        sample_out_dir = os.path.join(OUTPUT_ROOT, sample_name)
        os.makedirs(sample_out_dir, exist_ok=True)
        
        print(f"Processing sample: {sample_name}")
        # 构造FastQC命令
        fastqc_cmd = f"fastqc {file_path} -o {sample_out_dir} --noextract"
        # 结合conda环境执行命令
        full_cmd = f"{conda_activate_cmd} {fastqc_cmd}"
        # 执行命令
        subprocess.run(full_cmd, shell=True, check=True)

调用Python脚本的Bash命令

# 直接运行Python脚本即可,无需手动激活环境
python fastqc_batch.py

关键说明

  • --noextract参数:FastQC默认会解压生成的zip报告,加上该参数可以只保留zip包,节省空间
  • mkdir -p:确保目录不存在时创建,存在时不会报错
  • 样本名提取:通过去除文件后缀得到统一的样本名,避免结果目录混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:31