如何同时处理2台FASTA发电机

2024-06-24 11:50:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这看起来很琐碎,但却给了我一段艰难的时光。我只想同时处理两个fasta生成器,以便将一个文件的第一个头和序列与另一个文件的第一个头和序列进行比较,将第二个头和序列与第二个头和序列进行比较,依此类推,直到两个文件都完成。你知道吗

两个fasta文件具有相同的序列数,并且它们按一对中的2次读取排序,例如fasta1的第一个序列和fasta2的第一个序列是读取对,依此类推直到文件结束。你知道吗

我有一个生成器,它为fasta文件的每个序列提供头和序列

def fileParse (self):
    # get file from __init__ and open.
    # parse header and sequence
    yield (header, sequence)

然而,我似乎不知道如何在同一时间迭代两个文件。我从这个开始:

# x class variable sends first fasta
# y class variable sends second fasta 
for header, sequence in x.fileParse():
    for header2, sequence2 in y.fileParse():
        # compare headers and evaluate.

显然,这里的问题是,我将一个文件中的每个头与另一个文件中的每个头进行比较,我只想将第一个头与第一个头进行比较,将第二个头与第二个头进行比较,依此类推。你知道吗

我有困难,因为似乎我总是需要迭代通过生成器。也许我需要调整generator方法本身来同时生成两个文件的头和序列?你知道吗

谢谢


Tags: and文件infor排序序列variableclass
1条回答
网友
1楼 · 发布于 2024-06-24 11:50:06

我相信zip就是你想要的:

for (h1, s1), (h2, s2) in zip(x.fileParse(), y.fileParse()):

举例来说,zip最容易理解:

In [43]: range(5)
Out[43]: [0, 1, 2, 3, 4]

In [44]: range(3,8)
Out[44]: [3, 4, 5, 6, 7]

In [45]: zip(range(5), range(3,8))
Out[45]: [(0, 3), (1, 4), (2, 5), (3, 6), (4, 7)]

另外,你的问题暗示你自己在实现一个fasta阅读器。如果是这样的话,你可能想看看BioPython的SeqIO

相关问题 更多 >