genbank文件轉(zhuǎn)換成NCBI提交數(shù)據(jù)時的.tbl文件(genbank convert to tbl)

.tbl文件格式介紹 https://www.ncbi.nlm.nih.gov/Sequin/table.html

方法一:轉(zhuǎn)換格式的perl腳本

ftp://ftp.ncbi.nlm.nih.gov//toolbox/ncbi_tools/converters/scripts/gbf2tbl.pl

用法
perl gbf2tbl.pl genbankfile_name
方法二:在線程序 GB2sequin

網(wǎng)址 https://chlorobox.mpimp-golm.mpg.de/GenBank2Sequin.html

推薦文獻
GB2sequin — A file converter preparing custom Genbank files for database submission

葉綠體基因組提交到NCBI的流程
可以利用微信搜索 《如何優(yōu)雅地向NCBI上傳線粒體基因組序列》, 這篇文章介紹了利用Bankit提交線粒體基因組序列至NCBI的流程,同樣適用于葉綠體基因組序列

寫在結(jié)尾的廢話

這個學期一直在看和葉綠體基因組相關的文章,目前學習到向NCBI提交完整的葉綠體基因組序列,需要準備的文件包括葉綠體基因組fasta文件和注釋文件,注釋文件要求的格式為.tbl,按照常理應該會有已經(jīng)造好的輪子來利用常規(guī)的注釋文件(比如genbank格式,或者gff3格式)來生成.tbl文件,可是自己找了將近兩天的時間竟然沒有找到(找到了一些python腳本或者小軟件,但是都沒有運行成功;同時也找到了NCBI提供的小軟件table2asn_GFF3,目測功能是利用gff3格式的注釋文件生成.tbl文件,試運行了一下,可是參數(shù)太多,暫時還沒有搞明白該怎么使用),自己也嘗試著寫了一些腳本,奈何能力有限沒有能夠解決,前前后后大約折騰了4天左右的時間,之后因為忙一些其他事情中斷了一個星期左右,今天再次嘗試的時候發(fā)現(xiàn)原來葉綠體基因組注釋在線工具GeSeq https://chlorobox.mpimp-golm.mpg.de/geseq.html 中包括了格式轉(zhuǎn)換的工具GB2sequin,然后找到了這篇文獻來看又發(fā)現(xiàn)了格式轉(zhuǎn)換用到的perl腳本,暫時解決了提交序列的問題!

小小感悟:

面對解決不了的問題不要著急,只需要停下來讓腦子休息下然后在重新出發(fā)!

更新20190102

推薦一篇論文

Complete plastome sequences from Bertholletia excelsa and 23 related species yield informative markers for Lecythidaceae

  • 論文中提供了部分分析結(jié)果和分析使用到的相關代碼:The scripts and alignments used in this study can be found at https://bitbucket.org/oscarvargash/lecythidaceae_plastomes;其中有一部分是向NCBI提交葉綠體基因組的數(shù)據(jù)

    55.PNG
    記錄自己慢慢理解的過程

  • 自己使用Bankit向NCBI提交葉綠體基因組數(shù)據(jù)時要求的注釋文件中應該有對應的product內(nèi)容,自己注釋使用的是在線程序GeSeq,輸出的genbank文件中沒有product的內(nèi)容;那么如何把對應的product添加到已經(jīng)生成好的genbank文件中呢?今天想到了解決辦法:因為SeqIO模塊解析genbank文件后codon_start、transl_table、translation、product等內(nèi)容存儲在字典里;是可以手動添加其他內(nèi)容的,比如初始的genbank文件是這樣的
    56.PNG

    然后可以把它變成這樣
    57.PNG
from Bio import SeqIO
with open("rpl16.gb","gb"):
  for rec in SeqIO.parse("sequence.gb","gb"):
    for feature in rec.features:
      if feature.type == "CDS":
        feature.qualifiers["yan"] = "ming"
        feature.qualifiers["kobe"] = "bryant"
    SeqIO.write(rec,fw,"gb")
  • 自己的葉綠體基因組注釋是使用GeSeq做的,輸出的genBank文件中有一行’note‘;首先將這一行去掉
from Bio import SeqIO
for rec in SeqIO.parse("fileName.gb"):
  for feature in rec.features:
    if feature.type == "gene" and feature.qualifiers.__contains__("note"):
      feature.qualifiers.pop("note")
  fw = open("output_file.gb","w")
  SeqIO.write(rec,fw,"gb")
fw.close()
  • python小知識點:移除字典中指定的鍵:值 pop()
x = {}
x["yan"] = "ming"
x["kobe"] = "bryant"
x
x.pop("kobe")
x
  • 然后在NCBI上選一些和自己研究物種親緣關系比較近的物種的葉綠體基因組的genbank文件,放到同一個文件夾下,分別將基因名的對應的產(chǎn)物名寫到字典中的鍵和值
    python小知識點:fnmatch模塊,字符串匹配文件名的標準庫,主要有四個函數(shù)
    fnmatch 判斷文件名是否符合特定的格式
    fnmatchcase 區(qū)分大小寫
    比如我想篩選出某個文件下以gb結(jié)尾的文件的文件名
import fnmatch
fnmatch.fnmatch("abc.gb","*.gb") #返回True
import os
for file in os.lsidir("./"):
  if fnmatch.fnmatch(file,"*.gb"):
    print(file)

接下來是為genbank文件添加product字段

import os
import fnmatch
from Bio import SeqIO
fileName = []
for file in os.listdir("./")
  if fnmatch.fnmatch(file,"*.gb"):
    fileName.append(file)
products = {}
for file in fileName:
  for rec in SeqIO.parse(file,"gb"):
    for feature in rec.features:
      if feature.type == "CDS" or feature.type == "tRNA"
        products[feature.qualifiers["gene"][0]] = features.qualifiers["product"][0]
with open("output_1.gb","w") as fw:
  for rec in SeqIO.parse("own_gb_file.gb","gb"):
    for feature in rec.features:
      if feature.type == "CDS" or feature.type == "tRNA":
        feature.qualifiers["product"] = products[feature.qualifiers["gene"][0]]
    SeqIO.write(rec,fw,"gb")

理解了SeqIO解析genbank格式文件的數(shù)據(jù)存儲后,自己應該也可以寫一個簡單的腳本將genbank格式的文件轉(zhuǎn)化成.tbl文件,好好想一想該如何實現(xiàn);SeqIO模塊的源碼自己抽時間要多看幾遍!

更新2019018

自己的葉綠體基因組數(shù)據(jù)注釋是使用在線程序GeSeq做的,輸出結(jié)果genBank文件中包括intron和exon的信息,不想要這部分信息,想寫個腳本刪掉

  • 第一版
for rec in SeqIo.parse(“input_file.gb”,"gb"):
 fea_index = [] 
 for a,b in enumerate(rec.features):
   if b.type == "intron" or b.type == "exon":
    fea_index.append(a)
  for i in fea_index:
    rec.features.pop(i)
  fw = open("output_file.gb","w")
  SeqIO.write(rec,fw,"gb")
  fw.close()

一直遇到報錯IndexError: pop index out of range
想了好長時間才想明白: rec 里面存儲的內(nèi)容刪除一項后,對應的后面的內(nèi)容的index會相應遷移,比如有1,5,7,9,12五個數(shù)字,對應的位置分別是1,2,3,4,5;如果刪除前兩個,12對應的位置就有原來的5 改為了3

  • 更改腳本
for rec in SeqIO.parse("注釋文件/完成/Malus_baccata_C108_1.gb","gb"):  
    fea_index = []
    for a,b in enumerate(rec.features):
        if b.type == "exon" or b.type == "intron":
            fea_index.append(a)
        for s,i in enumerate(fea_index):
          rec.features.pop(i-s) ######
    fw = open("1.gb","w")
    SeqIO.write(rec,fw,"gb")
    fw.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容