从Swiss-Prot Fasta文件导入序列

时间:2016-06-20 14:49:02

标签: python fasta

我正在处理来自swiss-port(ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz)的fasta文件,其中以“>”开头的行中我们有一些关于蛋白质的信息酸序列。

有没有办法使用基因名称搜索这些行(在描述为“GN=xxxxxxx”的行中是x的基因名称)并导入序列在后来的行?

我正在努力解决这个问题,因为我在线路中间搜索时遇到了麻烦并创建了循环来复制下一行。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Linux,请熟悉sedawktail/head。他们将来会为你节省很多时间。

假设我们正在寻找基因FV3-002L

sed -n '/GN=FV3-002L/,/^>/p' uniprot_sprot.fasta | head -n -1

-n:告诉sed只在打印时打印

GN=FV3-002L:您的搜索字词

^>:搜索结束时,^是一行的开头,>是FASTA标题的开头

/p:告诉sed打印匹配

| head -n -1:让我们摆脱最后一行(懒得找到一个更好的正则表达式,但你明白了)

使用Python:

gene = 'FV3-002L'
gene_found = False
fasta = ''
with open('uniprot_sprot.fasta') as f:
    for line in f:
        if gene in line:
            gene_found = True
            fasta += line
        elif gene_found and line.startswith('>'):
            break
        elif gene_found:
            fasta += line

print(fasta)

该脚本打开你的uniprot文件,读取每一行,检查是否找到基因名称,如果是,它会读取每一行,直到下一个标题,最后打印FASTA序列。

请注意:这些片段只适用于一个例子,但也适用于多个基因。如果您想要定期执行此操作,则有必要寻找更有效的数据处理方法。对于生物数据的操作,您还可以查看BioPython