我在培训中有一项任务,我必须阅读和过滤大型 fastq 文件的“良好”读数。它包含一个标头,一个dna字符串,+号和一些符号(每个dna字符串的质量)。例如:
@hhhhhhhh
ATGCGTAGGGG
+
IIIIIIIIIIIII
我向下采样,使代码正常工作,保存在python字典中。但是事实证明原始文件很大,我重写了代码以提供一个生成器。它确实适用于下采样的样本。但是我想知道将所有数据取出并过滤到字典中是否是一个好主意。这里有人更好的主意吗? 我问是因为我自己做。我开始学习python几个月了,但我仍然在学习,但我一个人做。因为这个原因,我在这里寻求提示和帮助,如果有时候我问一些愚蠢的问题,对不起。 提前致谢。 保罗 我从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的数量。 / p>
答案 0 :(得分:1)
由于此培训迫使您手动进行编码,并且您具有将fastQ读取为生成器的代码,因此您现在可以使用拥有的任何度量标准(可能是phredscore?)来确定读取质量。您可以将每个“良好”的读取追加到一个新文件中,这样,如果几乎所有读取都证明是良好的,那么您的工作内存中就不会有太多东西。
写入文件是一个缓慢的操作,因此您可以等到拥有50000个良好序列后再将其写入文件。
如果您进行了大量生物信息学编程,请查看https://bioinformatics.stackexchange.com/。