首页 > 其他分享 >最长蛋白序列和最长转录本提取

最长蛋白序列和最长转录本提取

时间:2023-07-31 16:12:21浏览次数:27  
标签:seq fa res id write record 转录 序列 最长

1. 第一种数据格式为protein.fa(translated.fa) 和 gene.gtf文件,序列信息如下

点击查看代码
def readfasta(filename):
    fa = open(filename, 'r')
    res = {}
    ID = ''
    for line in fa:
        if line.startswith('>'):           
            ID = line#.strip('\n')
            res[ID] = ''
        else:            
            res[ID] += line#.strip('\n') 
    return res
res = readfasta('/PERSONALBIO/work/singlecell/s01/ref/Drosophila/GCF_000001215.4_Release_6_plus_ISO1_MT_translated_cds.faa')
uniq = {}
for k,v in res.items():
    gene = k.split(' ')[1]
    title = gene[6:-1]+'\n'
    v = [v]
    if title not in uniq:  # 注意这种生成双层字典的方法!
        uniq[title]  = v
    else:       
        uniq[title] += v
max_seq = {}   
for k,v in uniq.items():
    seq = max(v, key = len)
    max_seq[k] = seq    
w = open('longest.txt',"w") 
for k,v in max_seq.items():
    w.write('>' +k)
    w.write(v)
w.close()

这种运行完后,protein.fa文件中蛋白名直接替换为了基因名,在下游的分析中就不需要替换基因名了

第二种是gtf文件相对注释不全的数据,但是同一基因不同长度的cds序列id名以。1 .2 .3 区分

点击查看代码
#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@FileName: get_longest
@Time: 2022/3/25,19:12
@Motto: go go go 
"""
import argparse
from Bio import SeqIO


def read_file(file):
    t = {}  # 记录长度和序列名字
    result = {}  #这个字典用于储存最长转录本 、最长cds、最长protein
    for seq_record in SeqIO.parse(file, "fasta"):
        id = seq_record.id.rsplit(".", 1)[0]

        if id not in t:
            result[seq_record.id] = str(seq_record.seq)
            t[id] = [len(seq_record.seq), seq_record.id]
        else:
            if t[id][0] >= len(seq_record.seq):
                continue
            else:
                result.pop(t[id][1])
                result[seq_record.id] = str(seq_record.seq)
                t[id] = [len(seq_record.seq), seq_record.id]
    return result


def write(filename, res):
    with open(filename,'w') as f:
        for i, j in res.items():
            f.write(">" + i + "\n")
            f.write(j + "\n")


def main():
    parser = argparse.ArgumentParser(usage='********', description='得到最长结果')
    parser.add_argument("-i", "--input", help="input filename")
    parser.add_argument("-o", "--output", help="output filename")
    args = parser.parse_args()
    res_dict = read_file(args.input)
    write(args.output, res_dict)


if __name__ == '__main__':
    #res_dict = read_file(r'./cds.fa')
    #write(r'out_cds.fa', res_dict)
    main()

标签:seq,fa,res,id,write,record,转录,序列,最长
From: https://www.cnblogs.com/-bonjour/p/17593716.html

相关文章

  • Apache Shrio反序列化漏洞
    ApacheShiro是一个流行的Java安全框架,然而,它存在一个反序列化漏洞,即CVE-2017-5638。该漏洞允许攻击者通过构造恶意序列化数据,利用Shiro的序列化功能来执行任意代码,从而攻击Java应用程序的安全边界。 以下是ApacheShrio反序列化漏洞的介绍及复现过程:漏洞介绍CVE-2017-5638......
  • linux环境中,如何查看网络设备的序列号?
    通过iplink查看网络设备的序列号 iplink  查询结果中,最左边的一列,就是这个网络接口,在主机上的序列号。......
  • mysql 自增序列加前缀
    MySQL自增序列加前缀在MySQL数据库中,自增列是一种非常有用的特性,它可以为每一行记录自动生成唯一的标识符。然而,有时我们需要给自增列添加一个前缀,以便更好地组织和管理数据。本文将详细介绍如何在MySQL中实现自增序列加前缀的方法,并提供相应的代码示例。1.创建数据表首先,我们......
  • 【5.0】DRF之序列化组件
    【一】序列化组件介绍做序列化做反序列化在反序列化保存到数据库之前,做数据库校验【1】介绍DRF(DjangoRESTframework)是一个用于构建基于Django的WebAPI的强大框架。在DRF中,序列化组件是其中一个核心组件,用于在API请求和响应中处理数据的转换和验证。序列......
  • 【6.0】DRF之序列化组件高级
    【一】序列化高级之Source【补充】on_delete的参数详解models.CASCADE(级联删除):当删除与该字段关联的对象时,所有相关的对象将被级联删除。例如,如果一个出版社对象被删除了,与该出版社相关联的所有图书对象也会被删除。models.SET_DEFAULT:(设置为默认值):当删除与该字段关联的对......
  • 【四】DRF之序列化组件
    【一】序列化器-Serializer作用:序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型反序列化,完成数据校验功能【二】定义序列化器DjangoRESTframework......
  • 数据库之oracle查询、序列、建表
    1.查询emp表薪水降序排序后的第5-9条数据 2.创建序列 3.建表toys,调用序列的nextval方法实现id自增。添加数据 ......
  • 二次反序列化
    2023巅峰极客BabyURL题目给了jar包,反编译以后项目结构:在IndexController里有反序列化入口:@GetMapping({"/hack"})@ResponseBodypublicStringhack(@RequestParamStringpayload){ //将传进的参数进行base64解码byte[]bytes=Base64.getDecoder()......
  • Java反序列化Commons-Beanutils篇-CB链
    <1>环境介绍jdk:jdk8u65CB:commons-beanutils1.8.3pom.xml添加<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dep......
  • 最长(不)上升子序列
    直接用lower_bound()和upper_bound()进行二分查找1b[0]=a[0];2//最长不上升子序列3for(inti=1;i<cnt;i++){4if(b[cnt1]>=a[i])5b[++cnt1]=a[i];//序列向后移6else{7intx=upper_bo......