我正在处理来自swiss-port(ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz)的fasta文件,其中以“>
”开头的行中我们有一些关于蛋白质的信息酸序列。
有没有办法使用基因名称搜索这些行(在描述为“GN=xxxxxxx
”的行中是x
的基因名称)并导入序列在后来的行?
我正在努力解决这个问题,因为我在线路中间搜索时遇到了麻烦并创建了循环来复制下一行。
答案 0 :(得分:0)
如果您使用的是Linux,请熟悉sed
,awk
和tail/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。