我一直看到Genbank警告他们正在逐步取消GI编号并保存了一些fasta文件,我已按以下格式编辑了标题:
>SomeText_ginumber
我不知道从哪里开始这个但是有一种方法,理想情况下使用python,我可以从NCBI获得每个gi的相应登录号,并输出带有标题的文件,如下所示:
>SomeText_accessionnumber
这是文件格式的另一个例子:
>Desulfovibrio_fructosivorans_ferredoxin_492837709
MTKSVAPTVTIDGKVVPIEGERNLLELIRKVRIDLPTFCYHSELSVYGACRLCLVEVKNRGIMGAC
>Oxalobacteraceae_bacterium_AB_14_hypothetical_protein_522195384
MIKLTVNGIPVEVDEGATYLDAANKAGVHIPTLCYHPRFRSHAVCRMCLVHVAGSSRPQAACIGKA
修改/更新
from Bio import Entrez
from time import sleep
import sys
import re
Entrez.email = ''
seqs = open(sys.argv[1],"r")
for line in seqs:
if line.startswith('>'):
gi = re.findall("\d{5,}",line)
matches = len(gi)
#print(matches)
if matches < 2:
if gi:
handle = Entrez.efetch(db="nucleotide", id=gi, retmode="xml")
records = Entrez.read(handle)
print(line[0:line.rfind('_') + 1] + records[0]['GBSeq_primary-accession'])
sleep(1)
elif matches >= 2:
print("Error - More than one ginumber in header!")
break
else:
seq=line.rstrip()
print(seq)
else:
seq1=line.rstrip()
print(seq1)
答案 0 :(得分:1)
尝试使用BioPython。
以下代码段可以帮助您入门。首先从标题中获取GI(下划线后标题的一部分),从GenBank获取数据,打印旧标题但是使用登录号,然后输入其余的输入序列,完成:)
这适用于您的两个示例,但可能会因更多数据(缺少GI等)而失败。此外,加入号码具有下划线,就像您的标题一样,以后会使解析复杂化。也许用其他东西替换下划线或添加另一个分隔符。
from Bio import Entrez
from time import sleep
Entrez.email = 'your@email'
seqs = """>Desulfovibrio_fructosivorans_ferredoxin_492837709
MTKSVAPTVTIDGKVVPIEGERNLLELIRKVRIDLPTFCYHSELSVYGACRLCLVEVKNRGIMGAC
>Oxalobacteraceae_bacterium_AB_14_hypothetical_protein_522195384
MIKLTVNGIPVEVDEGATYLDAANKAGVHIPTLCYHPRFRSHAVCRMCLVHVAGSSRPQAACIGKA"""
for line in seqs.splitlines():
if line.startswith('>'):
gi = line[line.rfind('_') + 1:]
handle = Entrez.efetch(db="nucleotide", id=gi, retmode="xml")
records = Entrez.read(handle)
print(line[0:line.rfind('_') + 1] + records[0]['GBSeq_primary-accession'])
sleep(1)
else:
print(line)