首先,我們要了解一下什么是GBFF文件
GenBank純文本文件格式(GenBank flatfile到旦, 簡稱GBFF)
GBFF是GenBank數(shù)據庫的基本信息單位
GBFF序列文件由單個的序列條目組成棍弄。
序列條目由字段組成宵距,每個字段由關鍵字起始然低,后面為該 字段的具體說明英遭。
字段分若干次子字段胁赢,以次關鍵字或特性表說明符開始企蹭。
每個序列條目以雙斜杠“//*作結束標記
然后看一下每個序列條目所代表的意義
1、 LOCUS(代碼)序列的功能智末、序列長度谅摄、類型、種屬來源系馆、錄入日期
2送漠、 DEFINITION(說明)所含的生物學意義的總結性描述
3、 ACCESSION(編號)具有唯一性和永久性
4由蘑、 VERSION(版本號)檢索號闽寡、版本號
5、 KEYWORDS(關鍵詞)描述序列尼酿,“ . ”表示沒有任何描述內容
6下隧、 SOURCE(數(shù)據來源)序列來源生物的簡稱,或分子類型
7谓媒、 REFERENCE (文獻)與該數(shù)據有關的參考文獻淆院,按發(fā)表時間排名
8、 FEATURES(特性表)描述基因和基因的產物句惯,以及與序列相關的生物學特性土辩,其中包括
a. 特性關鍵詞(Feature key) 簡要說明功能組的關鍵詞
b. 特性位置(Location) 指明在特性表中的什么地方找到相關特性
c. 限定詞(Qualifiers) 相關特性的輔助信息
9、 ORIGIN(堿基排列順序)類似于FASTA格式給出了所記錄的序列
最后直接上代??抢野,更改輸入和輸出文件即可使用
import re
FILE_PATH = './input.gb'
OUT_FILE_PATH = './output.fasta'
d = {}
g = {}
tem = []
def con_spl(list_,n = 2):
return [list_[i:i + n] for i in range(0, len(list_), n)]
with open (FILE_PATH,'r')as f:
while True:
text_line = f.readline().strip('\t').split()
if text_line:
if text_line[0] == 'DEFINITION':
c = ' '.join(i for i in text_line[2:])
d[c] = []
g[c] = []
print (text_line)
elif text_line[0] == 'CDS':
cds = re.findall(r"\d+\d*?",text_line[1])
if len(cds) == 2:
d[c].append(cds)
else:
for i in con_spl(cds):
d[c].append(i)
elif text_line[0] == 'ORIGIN':
while text_line[0] != '//':
for i in text_line[1:]:
tem.append(i)
text_line = f.readline().strip('\t').split()
e = ''.join(i for i in tem)
g[c].append(e)
else:
pass
elif f.readline().strip('\t').split():
continue
else:
break
with open (OUT_FILE_PATH,'w')as f:
for i,o in d.items():
G = ''.join(g[I])
p = ''
for u in o:
u1 = int(u[0])
u2 = int(u[1])+1
p += G[u1:u2]
print ('>',i,sep='',file=f)
print (p,file=f)