首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中解析FASTA文件时出错

在Python中解析FASTA文件时出错
EN

Stack Overflow用户
提问于 2020-06-23 12:20:06
回答 1查看 164关注 0票数 3
代码语言:javascript
运行
复制
dict = {}
tag = ""
with open('/storage/emulated/0/Download/sequence.fasta.txt','r') as sequence:
    seq = sequence.readlines()
    for line in seq:
        if line.startswith(">"):
            tag = line.replace("\n", "")
        else:
            seq = "".join(seq[1:])
            dict[tag] = seq.replace("\n", "")   
    print(dict)

那些不熟悉FASTA文件的人的背景。此格式包含一个或多个DNA、RNA或蛋白质序列,其中带有以">“开头的序列的一行描述标记,然后以以下行(Ex)中的序列开始。对于DNA来说,A、T、G和C会重复很多次。它还附带了许多不必要的换行符。到目前为止,当我每个文件只有一个序列时,这段代码可以工作,但是如果存在多个序列,它似乎忽略了if条件。例如,每当它注意到">“时,它都应该将每个新标记:序列对添加到字典中,但它只运行一次,并将第一个描述作为字典中的键,并加入文件的其余部分,而不考虑">”字符,并将其用作值。在第一次出现之后,如何让这个循环注意到一个新的">“?

我有意识地离开了生物工程模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 12:31:06

更新:下面的代码现在适用于多行序列。

下面的代码对我来说很好:

代码语言:javascript
运行
复制
import re
from collections import defaultdict

sequences = defaultdict(str)

with open('fasta.txt') as f:
    lines = f.readlines()

current_tag = None
for line in lines:
    m = re.match('^>(.+)', line)

    if m:
        current_tag = m.group(1)
    else:
        sequences[current_tag] += line.strip()

for k, v in sequences.items():
    print(f"{k}: {v}")

它使用了许多您可能不熟悉的特性,例如正则表达式(在生物信息学中可能非常有用)和f-字符串格式。如果有什么事情让你困惑,那就去问吧。我要补充的一点是,您不希望将变量定义为dict,因为这将破坏Python在启动时定义的内容。我选择了sequences,它不这样做,而且信息更丰富。

作为参考,这是我在这个实例中使用的示例FASTA文件fasta.txt的内容:

代码语言:javascript
运行
复制
>seq0
FQTWEEFSRAAEKLYLADPMKVRVVLKYRHVDGNLCIKVTDDLVCLVYRTDQAQDVKKIEKF
>seq1
KYRTWEEFTRAAEKLYQADPMKVRVVLKYRHCDGNLCIKVTDDVVCLLYRTDQAQDVKKIEKFHSQLMRLME LKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>seq2
EEYQTWEEFARAAEKLYLTDPMKVRVVLKYRHCDGNLCMKVTDDAVCLQYKTDQAQDVKKVEKLHGK
>seq3
MYQVWEEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVCLQYKTDQAQDVK
>seq4
EEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVVSYEMRLFGVQKDNFALEHSLL
>seq5
SWEEFAKAAEVLYLEDPMKCRMCTKYRHVDHKLVVKLTDNHTVLKYVTDMAQDVKKIEKLTTLLMR
>seq6
FTNWEEFAKAAERLHSANPEKCRFVTKYNHTKGELVLKLTDDVVCLQYSTNQLQDVKKLEKLSSTLLRSI
>seq7
SWEEFVERSVQLFRGDPNATRYVMKYRHCEGKLVLKVTDDRECLKFKTDQAQDAKKMEKLNNIFF
>seq8
SWDEFVDRSVQLFRADPESTRYVMKYRHCDGKLVLKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>seq9
KNWEDFEIAAENMYMANPQNCRYTMKYVHSKGHILLKMSDNVKCVQYRAENMPDLKK
>seq10
FDSWDEFVSKSVELFRNHPDTTRYVVKYRHCEGKLVLKVTDNHECLKFKTDQAQDAKKMEK
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62534586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档