提取细菌基因组ORF思路:

1.通过FNA文件得到细菌基因组序列

2.分正负链和三个相位共6种情况统计ORF

3.写入文件

转载请保留出处!

统计细菌基因组ORF

贴上Python代码(版本:3.6)

 # -*- coding: utf-8 -*-
"""
Created on Thu Dec 14 13:19:00 2017 @author: zxzhu
""" import re
def N2M(sequence): #正负链转换
hash = {'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C','N':'N'}
sequence = ''.join([hash[i] for i in sequence])
return sequence[::-1] def translate(seq): #将序列转换为起始,终止,其他密码子
pa1 = re.compile(r'TAA|TAG|TGA')
after_trans = ''
for i in range(0,len(seq),3):
if seq[i:i+3]=='ATG':
after_trans+='I'
elif pa1.match(seq[i:i+3]):
after_trans+='T'
else:
after_trans+='O'
return after_trans def get_orf(seq,length=90):
pa2 = re.compile(r'I[IO]+?T') #匹配模式:起始1非终止1~N终止1
trans_seq = translate(seq)
m = pa2.finditer(trans_seq) #所有匹配结果的迭代
index = []
orf = []
for i in m:
index.append(i.span()) #序列起始,终止位置
for i in index:
orf_start = i[0]*3
orf_end = i[1]*3
#print(orf_start,orf_end)
if orf_end - orf_start >= length: #不小于90bp
orf.append(seq[orf_start:orf_end])
return orf def Seq2AA(sequence,hash): #翻译为AA序列
AA=''
for i in range(0, len(sequence) - 3, 3):
AA += hash[sequence[i:i + 3]]
return AA def main(fna,length=90):
fn = open(fna)
pa = re.compile(r'\s+')
hash_seq = {} # CDS hash,CDS2sequence
result1 = open('orf_seq.txt','w')
result2 = open('orf_AA.txt','w')
start = [0,1,2] #相位
strain = '+-' #正负链
hash_AA = {} # AA hash,sequence2AA
with open('AA.txt', 'r') as f: #AA.txt 为密码子表
for line in f:
line = line.strip()
if line:
line = pa.split(line)
hash_AA[line[0]] = line[1] #AA hash for line in fn: #获取序列
line = line.strip()
if line.startswith('>'):
A = pa.split(line)[0].replace('>', '')
hash_seq[A] = ''
else:
hash_seq[A] += line for key in hash_seq.keys(): #分+-链,3个相位统计ORF
seq = hash_seq[key]
for r in strain:
if r == '-':
seq = N2M(seq)
for s in start:
seq = seq[s:]
#trans_seq = translate(seq)
orf = get_orf(seq)
for i in orf:
if 'N' not in i: #去除N
AA =Seq2AA(i,hash_AA)
result1.write('>'+key+'\t'+r+'\t'+str(s)+'\n'+i+'\n')
result2.write('>'+key+'\t'+r+'\t'+str(s)+'\n'+AA+'\n')
fn.close()
result1.close()
result2.close() fna = 'GCA_000160075.2_ASM16007v2_genomic.fna'
main(fna)

NCBI可以找ORF,很方便。码一下:ORFfinder

统计细菌基因组ORF的更多相关文章

  1. 【蛋白质基因组】Proteogenomics方法介绍及分析思路

    概念 利用蛋白质组学数据,结合基因组数据(DNA).转录组数据(RNA)来研究基因组注释问题,被称为蛋白质基因组学."蛋白质基因组学"一词由Jaffe 等于2004 年首次提出,作 ...

  2. antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测

    2017年4月28日,核酸研究(Nucleic Acids Research)杂志上,在线公布了一个可搜索微生物次生代谢物合成基因组簇的综合性数据库antiSMASH数据库 4.0版,前3版年均引用2 ...

  3. 基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究

    基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究 2015-09-23 | 作者:所级中心基因组平台 张兵 [关闭] 近日,基因组所所级中心基因组平台三代单分子实时测序PacB ...

  4. NGS概念大科普(转)

    NGS又称为下一代测序技术,高通量测序技术 以高输出量和高解析度为主要特色,能一次并行对几十万到几百万条DNA分子进行序列读取,在提供丰富的遗传学信息的同时,还可大大降低测序费用.缩短测序时间的测序技 ...

  5. Canu FAQ常见问题

    链接:Canu FAQ Q: What resources does Canu require for a bacterial genome assembly(细菌基因组组装)?   A mammal ...

  6. Unnatural

    1. 纪录片:非自然选择 1.1 CRISPR-Cas9的出现 1.2 故事1:先天性基因缺陷而失明的小孩 1.3 故事2:基因变异的蚊子 1.4 基因技术应用的现状 1.5 担忧 2. CRISPR ...

  7. CRISPR/Cas9|InParanoid|orthoMCL|PanOCT|pan genome|meta genome|Core gene|CVTree3|

    生命组学: 泛基因组学:用于描述一个物种基因组,据细菌基因组动力学,因为细菌的基因漂移使得各个细菌之间的基因组差异很大,(单个细菌之间的基因组差异是以基因为单位的gain&loss,而人类基因 ...

  8. GWAS 全基因组关联分析 | summary statistic 概括统计 | meta-analysis 综合分析

    有很多概念需要明确区分: 人有23对染色体,其中22对常染色体autosome,另外一对为性染色体sex chromosome,XX为女,XY为男. 染色体区带命名:在标示一特定的带时需要包括4项:① ...

  9. MetaPhlAn 2:宏基因组进化分析

    描述 MetaPhlAn是分析从物种水平分辨率宏基因组鸟枪法测序数据的微生物群落(细菌,古细菌,真核细胞和病毒)的组成的计算工具.从版本2.0,MetaPhlAn还能够确定具体的菌株(在将样品含有先前 ...

随机推荐

  1. Fiddler显示服务器IP的方法

    Fiddler默认配置中是看不到服务器IP的,接下来简单介绍下在fiddler上也能够看到请求的服务器IP: 1.Fiddler--->Rules--->Customize Rules , ...

  2. [国嵌攻略][045-046][一跃进入C大门]

    [一跃进入C大门] 跳转方式 1.相对跳转:b或bl指令,通过计算两个地址之间的差值来给pc赋值相对跳转 2.绝对跳转:ldr指令,通过给pc直接赋值,完成绝对跳转 代码编写 1.在汇编代码中直接使用 ...

  3. VIM 文件搜索与替换

    文件内搜索与替换 :[range]s/pattern/string/[c,e,g,i] 例如: :%s/oldword/newword/cg //对文本中全部匹配进行替换 :m,ns/oldword/ ...

  4. PHP开发api接口安全验证

    php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道 ...

  5. 实现LNMP

    实现LNMP 环境: linux系统机器 A:一台N:nginx,ip:192.168.213.251 B:一台P:php-fpm,php-mysql ,ip:192.168.213.253 C:一台 ...

  6. input===》name属性异常错误

    <input type="text" name="status" /> 使用springMVC时,如果有这个输入框,此框必须要填,且必须是数字,否者 ...

  7. char,varchar,nvarchar,text区别与联系

    CHAR,NCHAR 定长,速度快,占空间大,需处理VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理NCHAR.NVARCHAR.NTEXT处理Unicode码

  8. sqllite小型数据库的使用

    1.适用场景:免安装型数据库:数据量不大,本地化管理:不依赖其他第三方类库:2.具体使用方法:添加sqllite类库引用 数据库连接定义,数据库以文件形式存储在sqllitedb/solution.d ...

  9. Angular19 自定义表单控件

    1 需求 当开发者需要一个特定的表单控件时就需要自己开发一个和默认提供的表单控件用法相似的控件来作为表单控件:自定义的表单控件必须考虑模型和视图之间的数据怎么进行交互 2 官方文档 -> 点击前 ...

  10. 手把手教学系列:从零开始配置VPS服务器

    1.什么是VPS? 百度百科:VPS(Virtual Private Server 虚拟专用服务器)技术,将一台服务器分割成多个虚拟专享服务器的优质服务. 通俗地讲,可以认为就是一台放在机房机架上的服 ...