上下文

时间:2018-02-28 23:01:29

标签: python grep bioinformatics fasta fastq

如何在我感兴趣的上下文后使用python打印两行。

Example.fastq

@read1
AAAGGCTGTACTTCGTTCCAGTTG
+
'(''%$'))%**)2+'.(&&'/5-
@read2
CTGAGTTGAGTTAGTGTTGACTC
+
)(+-0-2145=588..,(1-,12

我可以使用...

找到感兴趣的上下文
fastq = open(Example.fastq, "r")

IDs = [read1]

with fastq as fq:
    for line in fq:
        if any(string in line for string in IDs):

现在我找到了read1,我想打印出read1的以下行。在bash中我可能会使用像grep -A这样的东西。所需的输出行如下所示。

+
'(''%$'))%**)2+'.(&&'/5-

但是在python中我似乎无法找到一个等效的工具。也许“islice”可能会奏效,但我不知道如何从比赛的位置开始islice。

with fastq as fq:
    for line in fq:
        if any(string in line for string in IDs):
            print(list(islice(fq,3,4)))

2 个答案:

答案 0 :(得分:3)

您可以使用next()推进迭代器(包括文件):

print(next(fq))
print(next(fq))

这会消耗这些行,因此for循环将继续@read2

如果您不想使用AAA...行,您也可以使用next(fq)消费它。完整:

fastq = open(Example.fastq, "r")

IDs = [read1]

with fastq as fq:
    for line in fq:
        if any(string in line for string in IDs):
            next(fq)  # skip AAA line
            print(next(fq).strip())  # strip off the extra newlines
            print(next(fq).strip())

给出了

+
'(''%$'))%**)2+'.(&&'/5-

答案 1 :(得分:1)

如果您正在处理FASTQ文件,最好使用像BioPython这样的生物信息库,而不是滚动自己的解析器。

要获得您要求的确切结果,您可以执行以下操作:

from Bio.SeqIO.QualityIO import FastqGeneralIterator

IDs = ['read1']

with open('Example.fastq') as in_handle:
    for title, seq, qual in FastqGeneralIterator(in_handle):
        # The ID is the first word in the title line (after the @ sign):
        if title.split(None, 1)[0] in IDs:
            # Line 3 is always a '+', optionally followed by the same sequence identifier again.
            print('+') 
            print(qual)

但是你自己对质量价值观做不了多少。您的下一步几乎肯定是将其转换为Phred quality scores。但这是众所周知的复杂because there are at least three different and incompatible variants of the FASTQ file format。 BioPython会为您处理所有边缘情况,因此您可以这样做:

from Bio.SeqIO import parse

IDs = ['read1']

with open('Example.fastq') as in_handle:
    for record in parse(in_handle, 'fastq'):
        if record.id in IDs:
            print(record.letter_annotations["phred_quality"])