根據妳之前的問題,假定妳的數據符合這種格式:
>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