提取细菌基因组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. linux 内核提权

    不经意间找到了大牛总结的一些Linux提权exp 我直接借花献佛分享给大家 #CVE #Description #Kernels CVE-2017-1000367 [Sudo] (Sudo 1.8.6 ...

  2. YUI3组件框架之plugin

    plugin相关源码分析: plugin功能包括如下几个模块, 简单分析如下: pluginhost-base 维护对象 this._plugins = {}: 并提供方法: plug.unplug. ...

  3. Java进阶篇(三)——Java集合类

    集合可以看作一个容器,集合中的对象可以很容易存放到集合中,也很容易将其从集合中取出来,还可以按一定的顺序摆放.Java中提供了不同的集合类,这些类具有不同的存储对象的方式,并提供了相应的方法方便用户对 ...

  4. 【编程技巧】EXTJS中Ext.grid.GridPanel配置项autoExpandColumn的使用方法

    autoExpandColumn的作用是自动伸展,占满剩余区域.一般使用在列比较少,并且大多数列都比较窄,有一列比较宽的情况下,当然什么时候使用,还是得按照实际情况确定. 使用的时候主要有三点要注意的 ...

  5. 【编程技巧】NSTimer类的使用

    创建一个 Timer + scheduledTimerWithTimeInterval: invocation: repeats: + (NSTimer *)scheduledTimerWithTim ...

  6. 【视频编解码·学习笔记】2. H.264简介

    一.H.264视频编码标准 H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响.严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG- ...

  7. Java数据持久层框架 MyBatis之背景知识三

    摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...

  8. [one day one question] nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  9. jquery 导出Excel表格

    仅在 table 中应用过!适用于导出简单的excel <script type="text/javascript" src="jquery.table2excel ...

  10. linux_文件权限

    权限贯穿linux整个系统 创建文件或目录,属主和组都是当前用户 linux权限位? 9位基础权限位, 3位一组,总共12位权限 用户对文件权限,相当于你的笔记本 r      读    4 w    ...