首页 > 解决方案 > 通过生成器从 fastq 获取数据

问题描述

我在培训中有一项任务,我必须阅读和过滤大型fastq文件的“好”读物。它包含一个标题、一个 dna 字符串、+ 符号和一些符号(每个 dna 字符串的质量)。前任:

@hhhhhhhh
ATGCGTAGGGG
+
IIIIIIIIIIIII

我进行了采样,使代码正常工作,并保存在 python 字典中。但事实证明原始文件很大,我重写了代码以提供生成器。它确实适用于下采样的样本。但我想知道取出所有数据并在字典中过滤是否是个好主意。这里有人有更好的主意吗?我问是因为我自己在做。我开始学习 python 几个月了,我还在学习,但我一个人做。因为这个我在这里寻求提示和帮助,如果有时我问一些愚蠢的问题,我很抱歉。提前致谢。Paulo 我从 Biostar 的代码中得到了一些想法:

import sys
import gzip

filename = sys.argv[1]

def parsing_fastq_files(filename):
    with gzip.open(filename, "rb") as infile:
        count_lines = 0
            for line in infile:
            line = line.decode()
            if count_lines % 4 == 0:
                ids = line[1:].strip()
                yield ids
            if count_lines == 1:
                reads = line.rstrip()
                yield reads
        count_lines += 1

total_reads = parsing_fastq_files(filename)
print(next(total_reads))
print(next(total_reads))

我现在需要弄清楚如何使用'if value.endswith('expression'):' 过滤数据,但是如果我使用 dict 例如,但这是我的疑问,因为键和 val 的数量。

标签: pythonbigdata

解决方案


由于此培训迫使您手动编写代码,并且您拥有将 fastQ 作为生成器读取的代码,因此您现在可以使用您拥有的任何指标(可能是 phredscore?)来确定读取的质量。您可以将每个“好的”读取附加到一个新文件中,这样如果几乎所有读取结果都很好,您的工作内存中就没有太多东西了。

写入文件是一项缓慢的操作,因此您可以等到拥有 50000 个好的序列后再将它们写入文件。

如果您进行大量生物信息学编程,请查看https://bioinformatics.stackexchange.com/ 。


推荐阅读