使用biopython来提取带有注释文件的指定gene长度的gene
from Bio import SeqIO
import re
def get_gene(file_path):
'''
本函数主要应用于从带有注释的gbff文件里面提取基因
file_path 为 输入的gbff文件
seq_record.features[1].location 主要是为了获取gene的位置,然后转换成字符串
再使用re匹配数字,转换成相对应的整型,
通过if来判断两次基因位置的差值,来获取指定长度的gene
返回为gene以及gene的Id
gbff 文件 中的 feature 会有时出现 assembly ,gene 会向下移动,所以 做了个比较
'''
return_gene=[]
gene_id = []
for seq_record in SeqIO.parse(file_path, "genbank"):
j=0
while j < len(seq_record.features):
try:
if seq_record.features[j].type == 'gene':
gene_location = [int(s) for s in re.findall(r'-?\d+\.?\d*', str(seq_record.features[j].location))]
if gene_location[1]-gene_location[0] < 30000:
gene_id.append([str(seq_record.features[j].qualifiers['gene']),str(seq_record.features[j].qualifiers['db_xref']),str(seq_record.features[j].location)])
return_gene.append(str(seq_record.seq[gene_location[0]:gene_location[1]]))
j=j+1
except:
print("over")
return return_gene,gene_id
print('over')