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

Python读取CSV按行匹配基因引物对筛选fastq文件的逻辑修复

问题说明
  • 目标目录下存放大量命名符合gene_primer_otherinfo.fastq.gz格式的fastq压缩文件
  • 目录上级存放64行的引物组合CSV文件,记录所有需要保留的Gene与Reverse_primer配对关系,CSV结构如下:
GeneReverse_primer
Gene1R1.1
Gene1R2.1
Gene1R3.1
Gene1R4.1
Gene2R1.2
Gene2R2.2
  • 当前阶段仅需实现合法/非法配对的识别功能,后续需将非法配对文件移动至单独文件夹
  • 文件名示例:
    • 需保留的合法文件:gene1-R1.1_ID_R1.fastq.gz、gene1-R2.1_ID_R1.fastq.gz、gene2-R1.2_ID_R1.fastq.gz
    • 需移除的非法文件:gene1-R1.2_ID_R1.fastq.gz、gene1-R2.2_ID_R1.fastq.gz、gene2-R1.1_ID_R1.fastq.gz
  • 现有故障:文件名拆分逻辑运行正常,但代码未按行绑定基因和引物的配对关系,仅单独判断两个字段是否存在于对应列,导致所有文件都被判定为合法。脚本存放在目标目录上级运行,可正常读取文件名、提取基因和引物信息。
故障原因

原判断逻辑存在两处致命错误:

  1. 对pandas列做相等判断返回的是布尔序列,没有要求「基因匹配」和「引物匹配」两个条件在CSV同一行同时成立,会出现跨条目的错配
  2. 判断条件外层额外包裹了方括号,将布尔序列转为非空列表,Python中非空列表的布尔值永远为True,因此所有文件都会走到okay分支
修正后可运行代码
import pandas as pd
import os
import re

folder = "sandbox6"
# 读取CSV后将合法的(基因,引物)配对存入集合,查询效率高且不会出现配对错位
bc = pd.read_csv("primer_combinations.csv")
valid_pairs = set(zip(bc['Gene'].str.lower(), bc['Reverse_primer']))
exceptions = []

for root, dirs, files in os.walk(folder):
    for file in files:
        # 跳过非fastq.gz格式的无关文件
        if not file.endswith(".fastq.gz"):
            continue
        try:
            split_fname = re.split(r"(\w+)-(\w+\.\d)(_\w+_)(R\d)\.fastq\.gz", file)
            gene, primer = split_fname[1].lower(), split_fname[2]
            # 直接判断提取到的配对是否在合法集合中,严格校验配对关系
            if (gene, primer) in valid_pairs:
                print(file, gene, primer, 'okay')
            else:
                print(file, gene, primer, 'invalid combination')
        except:
            exceptions.append(file)
            continue

print("文件名解析异常的文件列表:", exceptions)
关键修改点
  • 提前用zip将CSV同一行的基因和引物绑定为元组存入集合,从根源上避免跨条目错配
  • 删除了原判断条件外层多余的方括号,直接做集合成员判断,逻辑准确
  • 对基因名字段统一做小写转换,兼容CSV中大写Gene、文件名中小写gene的大小写差异,避免误判
  • 正则字符串添加raw前缀,转义逻辑更规范,减少匹配异常
  • 增加文件后缀过滤,跳过目录下无关文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:24:24