多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
相关产品推荐
相关产品推荐

