从细菌GFF文件提取CDS序列并转换为氨基酸序列

最近在上生物信息学原理,打算记录一些课上的作业。第一次作业:如题。

基本思路:

      1.从GFF中读取CDS的起始终止位置以及正负链信息。GFF格式见 http://blog.sina.com.cn/s/blog_8a4f556e0102yd3l.html.

      2.利用起始/终止位置等信息从FNA文件中提取CDS序列。FNA格式见 http://boyun.sh.cn/bio/?p=1192.

      3.利用CDS序列及密码子表得到FAA文件并输出。

注意:最需要注意的一点是:当GFF中CDS位于负链时,需要进行碱基互补配对,即反向互补(5‘到3‘配3‘到5‘)。

下面给出python代码。python3.6

以下问题有待解决:得到的FNA文件和FAA文件的注释信息不全,并且没有提供命令行参数,交完作业再补充。

 1 #bioinformatics homework
 2 import re
 3 class CDS2AA():
 4     pa = re.compile(r‘\s+‘)
 5     Pa = re.compile(r‘[TCAG]TG‘)                 # 细菌起始密码子NTG
 6     def __init__(self,fna,gff):
 7         self.fna = fna
 8         self.gff = gff
 9     def N2M(self,sequence):
10         hash = {‘A‘: ‘T‘, ‘T‘: ‘A‘, ‘C‘: ‘G‘, ‘G‘: ‘C‘}
11         sequence = ‘‘.join([hash[i] for i in sequence])     #正负链转换
12         return sequence[::-1]
13     def Get_CDS_index(self,line):
14         line = self.pa.split(line)
15         CDS = (line[0], line[3], line[4], line[6])
16         return CDS
17     def Seq2AA(self,sequence,hash):
18         AA = hash[sequence[:3]]
19         if self.Pa.match(sequence[:3]):
20             AA = ‘M‘                                 #起始密码子
21         for i in range(3, len(sequence) - 3, 3):
22             AA += hash[sequence[i:i + 3]]
23         return AA
24     def CDS2AA(self):
25         fn = open(self.fna, ‘r‘)
26         gf = open(self.gff,‘r‘)
27         r = open(‘AA_sequence.txt‘, ‘w‘)
28         w = open(‘CDS.txt‘, ‘w‘)
29         hash_AA = {}  # AA hash,sequence2AA
30         with open(‘AA.txt‘, ‘r‘) as f:
31             for line in f:
32                 line = line.strip()
33                 if line:
34                     line = self.pa.split(line)
35                     hash_AA[line[0]] = line[1]      #AA hash
36         hash_CDS = {}  # CDS hash,CDS2sequence
37         for line in fn:
38             line = line.strip()
39             if line.startswith(‘>‘):
40                 A = self.pa.split(line)[0].replace(‘>‘, ‘‘)
41                 hash_CDS[A] = ‘‘
42             else:
43                 hash_CDS[A] += line
44         fn.close()
45         for line in gf:
46             line = line.strip()
47             if ‘CDS‘ in line:
48                 i = self.Get_CDS_index(line)
49                 sequence = hash_CDS[i[0]][int(i[1]) - 1:int(i[2])]
50                 if i[3] == ‘-‘:
51                     sequence = self.N2M(sequence)
52                 #w.write(i[0] + ‘\n‘ + sequence + ‘\n‘)
53                 s = self.pa.split(line)
54                 p = re.compile(r‘ID=(.*?);.*?Dbxref=(.*?);.*?Name=(.*?);.*?gbkey=(.*?);.*?product=(.*?);.*?protein_id=(.*?);‘)
55                 m = re.findall(p,line)
56                 s = s[0]+‘_‘+m[0][0]+m[0][2]+‘\tdbxref=‘+m[0][1]+‘\tprotein=‘+m[0][4]+‘\tprotein_id=‘+m[0][5]+‘\tgbkey=‘+m[0][3]
57                 w.write(s + ‘\n‘ + sequence + ‘\n‘)
58                 AA = self.Seq2AA(sequence, hash_AA)
59                 r.write(i[0] + ‘\n‘ + AA + ‘\n‘)
60         w.close()
61         r.close()
62
63 if __name__==‘__main__‘:
64     fna = ‘GCA_000160075.2_ASM16007v2_genomic.fna‘
65     gff = ‘GCA_000160075.2_ASM16007v2_genomic.gff‘
66     m = CDS2AA(fna,gff)
67     m.CDS2AA()

一些其他的问题我会在交作业前完善。后面的有意思作业题目会陆续上传。

时间: 2024-11-29 12:38:20

从细菌GFF文件提取CDS序列并转换为氨基酸序列的相关文章

browserify 不打包某些文件或者把公共文件提取出来教程

var gulp = require('gulp') var fs = require("fs") var babelify = require('babelify') var browserify = require('browserify') var rename = require('gulp-rename') var uglifyjs = require('gulp-uglifyjs') var vendors = ['react','react-dom','jquery'];

RPM包文件校验和文件提取

RPM包文件校验和文件提取,布布扣,bubuko.com

Ajax获取 Json文件提取数据

摘自 Ajax获取 Json文件提取数据 1. json文件内容(item.json) [ { "name":"张国立", "sex":"男", "email":"[email protected]", "url":"./img/1.jpg" }, { "name":"张铁林", "sex"

苹果IPSW文件提取软件

ipsw文件 提取系统文件 方法总结 由于修改运营商文件造成我的有锁4S无法使用移动卡了,在网上苦寻一番还是没有结果,最后萌生了从固件中提取文件的想法,于是便开始在网上搜集资料,最后文件终于提取成功并修复了我的问题,现在把我的经历记录一下,希望对有需要的朋友有所帮助. 注:本次提取操作全部是在ubuntu下进行的,另外附件里面有已经解密.解压过的dmg文件,可以直接在MAC或linux下挂载 1,首先到theiphonewiki网站看看你所需要的文件对应的设备及系统版本是不是已经有破译的密钥,如

linux 已安装包校验、rpm包中文件提取

已安装包校验 rpm -V 已安装的包名-V 校验指定rpm包中的文件 rpm -V pth没有任何提示,说明自安装后没有做过任何修改 rpm包中文件提取 比如对一个系统配置文件误操作,可以根据这个文件找到它所属的rpm包,然后再从rpm包中提取这个文件再覆盖被误操作文件 rpm2cpio 包全名 | cpio -idv .rpm包中文件绝对路径-i copy-in模式,还原-d 还原时自动新建目录-v 显示还原过程 rpm2cpio将rpm包转换为cpio格式的文件 cpio是一个标准工具,它

webpack4对第三方库css,项目全局css和vue内联css文件提取到单独的文件(二十二)

在讲解提取css之前,我们先看下项目的架构如下结构: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有的依赖包 | |--- app | | |---index | | | |-- views # 存放所有vue页面文件 | | | | |-- index.vue | | | | |-- list.vue | | | |-- components # 存放vue公用的组件 | | | |-- js

从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测

//从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测 //作者:sandy //时间:2015-10-10 #include <cv.h> #include <highgui.h> int main(int argc, char *argv[]){ //预备工作 CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件 i

python文本处理---fasta文件提取指定ID的序列

利用python脚本,提取指定ID名称的序列 #!/usr/bin/python3 #-*- coding:utf-8 -*- #提取指定ID的序列 import sys args=sys.argv fr=open(args[1], 'r') fw=open('./out.fasta', 'w') dict={} for line in fr: if line.startswith('>'): name=line.split()[0] dict[name]='' else: dict[name]

python学习——通过命令行参数根据fasta文件中染色体id提取染色体序列

提取fasta文件genome_test.fa中第14号染色体的序列,其内容如下: >chr1 ATATATATAT >chr2 ATATATATATCGCGCGCGCG >chr3 ATATATATATCGCGCGCGCGATATATATAT >chr4 ATATATATATCGCGCGCGCGATATATATATCGCGCGCGCG >chr5 ATATATATATCGCGCGCGCGATATATATATCGCGCGCGCGATATATATAT >chr6 ATCG