展开全部
根据你之前的问题,假定你的数62616964757a686964616fe58685e5aeb931333335313731据符合这种格式:>SeqName1
Seq1
>SeqName2
Seq2
...
这里不要求Seq1只占一行(即允许其中有换行符出现)。假如Seq总是只占一行的话,其实就是奇数行是名字,偶数行是序列本体而已,读取不要太简单……
以下是简单的实现。考虑到文件可能很大,使用迭代来逐个读入数据。文件较小的情况可以使用列表表达式直接实现- -。
遍历文件时的流程:
如当前行以'>'开始,将其存为k(序列名称),直到发现下一个序列名称为止的所有行,填入v(序列)。再次发现'>'开始的行时,将(k, v)存入字典,并将v清空。此外的是实现细节。注释之后太啰嗦了,对哪里有疑问请追问。fileFa = open("SEQ.FASTA", "r")
dic, k, v = {}, '', []
for i in fileFa:
if i.startswith('>'):
dic[k] = v
k = i[1:-1]
v = []
else:
v.append(i)
dic[k] = v
dic.pop('')
print "%s sequences in total" % len(dic)
for (k, v) in dic.items():
print("SEQUENCE: %s\nLENGTH:%s" % (k, sum(map(len, v))))
使用你上一问题提供的4个序列,输出如下:4 sequences in total
SEQUENCE: qwe56_44514
LENGTH:98
SEQUENCE: qwe56_44606
LENGTH:82
SEQUENCE: qwe56_44424
LENGTH:43
SEQUENCE: qwe56_869
LENGTH:39