这看似微不足道,但却给了我一段艰难的时光。我只想同时处理两个fasta生成器,以便将一个文件的第一个头和序列与另一个文件的第一个头和序列、第二个到第二个文件的顺序进行比较,直到两个文件都完成为止。
这两个fasta文件都有相同的序列数,它们被排序为一对的2读,例如fasta1的第一序列和fasta 2的第一序列是读对等,直到文件结束。
我有一个生成器,它为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.显然,这里的问题是,我比较了一个文件中的每个头和另一个文件中的每个头,其中我只想比较第一个头和第一个头,第二个头到第二个头,等等。
我遇到了困难,因为似乎我总是需要迭代生成器。也许我需要调整genrator方法本身来为两个文件同时生成一个头和序列?
谢谢
发布于 2014-09-11 19:42:37
我相信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)]P.S.你的问题暗示你自己正在实施一个fasta阅读器。如果是这样的话,您可能想看看BioPython的SeqIO
https://stackoverflow.com/questions/25795706
复制相似问题